約 3,416,730 件
https://w.atwiki.jp/oblivion1/pages/251.html
旅の宿過去ログ一覧
https://w.atwiki.jp/oblivionxbox360/pages/123.html
情報提供・情報検証 過去ログその1 R2とL2が押しても反応ないよー。 ブルーブラッドの鍵>砦の中にいる山賊の頭が持ってるよ。倒して奪おう。 -- (Alice Ice) 2007-11-01 01 06 24 ダイビングロック登頂に挑戦して、転落死した人発見・・・手紙の内容がまた・・・なんとも・・・ -- (名無しさん) 2007-11-02 20 35 59 鍛冶の試練は売ってない事がある様です。シェイディンハルの戦士ギルドにはありました。 -- (名無しさん) 2007-11-04 11 27 44 顔作成時、リセットを2回続けて選択すると、全項目がセンターになる。 -- (PS3) 2007-11-05 20 27 01 悪名回復のため、社巡礼したんですが何度まわっても「神々に許しを請え」みたいな事言われちゃう。バグですかね? -- (もぐ) 2007-11-06 06 09 37 魔術師クエでアークメイジになった後も手書きのメモと巨大黒魂石、鍵数個がクエストアイテム扱いのままで捨てられない。仕様ですかね? -- (Alice ice) 2007-11-06 09 10 11 ↓仕様です。他にも捨てられないものが多々あります。 -- (無知の王) 2007-11-06 20 21 34 最近、マーティンを連れていないのに街中で突然深遠の信者から襲われるようになった。九大神装備を装備しているからだろうか?既出ならスマソ -- (暁の信者) 2007-11-06 22 14 06 書物「火中に舞う・第6章(商才スキルアップ)」、コロールのキャスタ・スクリボニアの家にて発見 -- (名無しさん) 2007-11-07 16 37 06 盗賊ギルド最終クエストで、スプリングヒールの靴をちゃんと壊してから最後のイベントをこなしてみると、フリーズせずに無事に抜けました。スプリングヒールの靴を所持している場合はその直前でフリーズしました。究極の強奪でのクエストアイテムによってフリーズするかが決まるのかもしれません。ただあくまでも私の場合、そうだったというだけかもしれませんが。 -- (ツー) 2007-11-09 01 39 22 ↓↓↓↓ありがとうございます。あきらめるしかないんですね^^;重さは0なので実害はないですが邪魔ですよね。 -- (Alice ice) 2007-11-10 06 51 07 野盗の頭がでてくるダンジョンってどこにありますか? -- (たけん) 2007-11-10 22 44 04 ↓バグやゲーム内仕様について「提供・検証」する場所です。※ゲームの攻略などについて質問する場所ではありません。 -- (名無しさん) 2007-11-11 13 30 50 ↓↓「お勧め狩場」のページにて随時追記中です 情報を待つか、自分で探して書き込んでください -- (名無しさん) 2007-11-11 13 54 02 スケルトン等を召喚し、武器破壊をエンチャした武器で相手の武器を破壊し、且つ倒すと相手の破壊された武器が道端に残るみたいです。検証してませんが、呪文等でも出来ると思うので、壊れた武器を集めて鍛冶のスキル上げに利用しつつ、序盤は金稼ぎが出来るかと。 -- (名無しさん) 2007-11-12 09 30 40 ↓武器破壊魔法でも可能。ただし室内でやると盗品扱いになる時がある(?)リッチにやるとちゃんと杖残ります。 -- (名無しさん) 2007-11-12 13 45 52 服役後に必ずいるあの方々はなんなんでしょう?俺の場合武器の配達の3人が必ずいるんですが。 -- (Alice ice) 2007-11-12 14 20 12 魔術師ギルド「情報の対価」にて。ハンターに情報を与えて突入させそのまま放置したら、吸血鬼は全滅したがハンターが出て行かなくなった。ハンターに一人死者が出て、灰も全部集め切れていない状態だったがもしやこれのせいだろうか。真相はともかく、よくひっかかるクエストだと思う -- (名無しさん) 2007-11-13 08 25 20 霊峰の指は、キャラLV3または4でもらうと、雷:6ポイント-5fit 消費14 だが、LV5でもらうと、20ポイント-5fit 消費97 と効率の悪い魔法になってしまう。 LV1、2は未確認。 LV6以上も未確認。 -- (名無しさん) 2007-11-13 10 35 30 LV10で受けられる”ノクタールの目”の満ち潮の洞窟に、LV5(クエは当然受けられない)で行ったら、カルパークラン・トロールがいた。 ノクタールの目はなかった。 -- (名無しさん) 2007-11-13 10 39 30 運動のスキルは、同じ距離を移動する場合、走るよりも歩いた方が、上がりにくい(スキル管理に利用)。 -- (名無しさん) 2007-11-13 13 29 49 ↓もっと言えば、ファストトラベル使えば、どんなに遠くてもその移動による運動スキルは上がらない。 -- (名無しさん) 2007-11-13 13 31 59 九大神クエのウマリルとの決戦で騎士達を全員死なせると(セドレット卿は不死身)その後新たな騎士が補充される。しかも固有名が無くなった事で死んだ後も復活するし、オークやダークエルフといったレア種族も仲間にできる。ついでに若い女性騎士も入ってるから仲間にするのは補充要員お勧めだと思う。 -- (名無しさん) 2007-11-13 15 20 20 盗賊ギルドクエストにて不死待機可NPCのアミューゼイ -- (名無しさん) 2007-11-13 22 19 30 ↓途中送信すいません。盗賊ギルドクエストにて不死&待機可NPCのアミューゼイが加入したが、ギルドの掟のせいか戦おうとしないし、常に隠密状態なんで盾にもならない。 -- (名無しさん) 2007-11-13 22 27 16 D -- (名無しさん) 2007-11-16 00 35 09 シドリ=アシャックのルーンストーンについて。Azura's Shrineの北に確認。 -- (名無しさん) 2007-11-17 13 06 29 精霊の石碑について。スキングラードより北西西、タルウィンクの真南。 -- (名無しさん) 2007-11-19 02 05 20 PS3版は神像クエストで手に入る武器関係がレベル依存になっている。 -- (PS3) 2007-11-21 14 33 30 PS3版。マラキャス神像クエの入手武器ヴォレンドラングはLv18で攻撃力7でした。神像クエで手に入る防具・指輪はLv依存無しっぽい。 -- (PS3) 2007-11-22 14 24 36 タララ王女の謎 第4巻をカラクタカス砦にて発見、幻惑スキルが上がりました。(PS3版) -- (名無しさん) 2007-11-22 21 21 40 ↓よろしければどなたかxbox360版での確認及び書物のページの編集お願いします。 -- (名無しさん) 2007-11-22 21 51 08 ナミラの神殿クエストが何をしても出来ません。安物のワイン7本、自策魔法、3500Gの巻物、魅力撃退を含む食べ物(リーキなど)ステータスを見るとちゃんと魅力40以下まで下がっているのですが。悪名、最高賞金額ともに0なのがいけないのでしょうか?名声と悪名のバランスとか関係してるのでしょうか? -- (WEBDEMON) 2007-11-23 04 45 05 それともこれがクラヴィスカルにウンブラ渡した呪い?(以前のセーブではウンブラをキープしたんで)、これが犬の像がウンブラ渡すなと言ってた理由? -- (WEBDEMON) 2007-11-23 05 00 18 運動のスキルはスキルトレーナー(アンヴィルのマスター)を使うのが効果的です。70ぐらいからレベルアップするごとに訓練。過去のセーブでは、800時間のプレイに、盗賊ギルド以外全部やっても80ぐらいでしたが、現セーブでは300時間ぐらいで98までになってます。(他のスキルは商才以外ボタン連打かただ使っていればすぐに100まで上げられるので。 -- (WEBDEMON) 2007-11-23 05 40 59 薬を調合するときは必ず(初めは)軽いもので作ること。あとから作る薬・毒は何で調合しても、同じ効果(一番上の・説明しきれないほど複雑ですが)のものは重さも同じになる。気をつけてやってれば、薬に毒も全て重さ0.1。例えば達人は、デイドラの心臓(重さ2)を体力回復13pt-43秒(重さ0.1)の薬に。他に何でもいらないものは、錬金して売る(56G)カットチーズを2Gで買ってスタミナ回復27pt-86秒に変えその店に20+倍の値段で売り、気がつけば金なんて1億こえて、しかも商才のスキルもアップ。売ってる薬(高い重いしかも効果がひとつで短い)のを買うのは金の無駄。序盤は、スタミナ回復を作りまくって売って金にそれで体力回復の薬と修理用ハンマーを買い残りは帝都のイージス、九大神、精霊の篭手とかに。 -- (WEBDEMON) 2007-11-23 07 03 32 *管理人さんへ;やはり隕石エンチャントの服(炎氷雷の盾防御計75)に手かせ、フード魔法耐性UP(計40)変哲の無い指輪、クエアイテムバグ蛇眼の指輪(魔法耐性UP計105)におきまりのダメージ反射101%の方がデイドラ&重量0バグの魔力の鎧とグリーヴ(隕石エンチャント魔法耐性UP計100)に同じくダメージ反射101装備+生命力又妖術師の指輪よりもはるかに強かったです。コロール街中でLV50難易度最大で散乱(無差別NPC切り全ギルド追放)で逮捕抵抗~の究極の試練の結果、やはりいくらデイドラでも10分持ちませんでした。服で試したところ20秒毎ぐらいに溜まった矢60本~捨てて、体力&マジカ回復の薬飲み、隕石エンチャントのスタミナ撃退60の魔力の剣、とゴールドブランド(極大魂石60固/黒40固ホットキー)に魔法&炎耐性ダウン100-10秒連発で不死身NPC以外倒し、自宅に逃げ込み休息、次の町に高速移動~散乱/逮捕抵抗の繰り返しで不死身でした。帝都も余裕で、薬、毒、魂石はほぼ無限に各町の自宅に保管してたのでどこまでやれるかと3時間ぐらいがんばってたのですが、180人ぐらいでゲームと知りながら罪悪感に耐え切れず止め前のセーブをロードしました。何事も無かったようにNPCに英雄と言われるの正直言って暗殺ギルドのクエストより気持ち悪かったです。 -- (WEBDEMON) 2007-11-23 10 36 23 魔力の武器・防具、召還、修理、捨て、装備、破壊魔法(自己)武器・防具腐食、店で修理、不可視100%(自己)、NPCスリで、味方の護衛してきたんですがクエスト完了後何日かしたら元の装備に戻ってるのが普通と思ってたのですが、熱狂的なファンは3ヶ月(ゲームの)ほどドレモアやってました。でも褐色のフード欲しさに装備させた魔力の兜、レアウィンのスドラッサもう1年以上着けてます。 -- (WEBDEMON) 2007-11-23 11 17 16 スキングラードで買える家の二階の一番左の宝箱の中身が入れても表示されない。一回ゲーム終了させると表示されるように戻るんですが、新たに仕舞うとまた表示されない。アイテムデータ自体は生きているんでしょうが表示されないというバグ(表示されない時は引き出せません)にかかっている人は他にもいますか? -- (kicant) 2007-11-25 14 18 48 ↓すみません既出でした(鍛冶で100以上という) -- (kicant) 2007-11-25 14 23 10 てかここ360版のwikiだろPS3版のこと書き込むなよ -- (ソウルド) 2007-11-25 22 40 30 暗殺ギルドクエ「暗殺された男(The Assassinated Man)」にて、聖堂の地下墓所へ行くところがあるのですが、聖堂の地下墓所の鍵を所持していても、「鍵が必要です」とでました。これは明らかなバグです。・・・・なんでこうなったんだろう?殺した後に鍵取ったからかな・・・・?? -- (Amour) 2007-11-25 23 23 48 ↓一日経過したら入れました。なして?そういう仕様なんでしょか?どうもすみませんでした。 -- (Amour) 2007-11-25 23 34 37 ↓ 「遺体は翌日には地下墓所に安置されているだろう」って話聞いてなかったのか?元々一日待たないと(クエスト的に)ダメ -- (名無しさん) 2007-11-26 02 59 51 スプリングヒールの靴を手に入れるクエストで日記を入手して読んでも何も起こらないです。その後私室に行って埋葬者リストみたいなのを読むとグレイフォックスに見せるべきだ的な文章が出てくるんですが、これはもう一度グレイフォックスに会えと言うことなんでしょうか。マーカーが表示されないんで何処にいるかもさっぱりですし… -- ( ) 2007-11-26 04 23 02 二つ↓それは知ってましたよ。でもこのサイトには「クエストが更新されたことを確認したら聖堂の地下墓所に~」って書いてたんで、入れると思ったのです。それに一日経過前にいくと~っていうのも書かれていたので、一日待たなくても入れると解釈してもおかしくないですよね? -- (Amour) 2007-11-26 13 26 59 コロールの「失われた遺産」ミッションで、町でウェザーレアの話聞いた後、場所聞かずに放置して先にウェザーレアを見つけたら倒すはずのオーガが出ずに進めなくなった。 -- (名無しさん) 2007-11-26 23 49 51 軽業が50に達すると、隠密切りが強攻撃しかできなくなるバグ(仕様?w)を発見。回転避けモーションのメモリを確保するために、別のものを削減したのかな?よりによって暗殺者の暗殺者たる主軸を犠牲にするっていう…。回転避けを覚えてしまった時、暗殺者は暗殺能力が半減する。哲学的仕様なのか…な?w。気をつけようにも、段差とか飛んでるうちにいつか上がるしな。特に暗殺者だと。どうせ駄目なら、ならず者でやり直すか… -- (名無しさん) 2007-11-26 23 57 54 PS3版は神像クエストで手に入る武器関係がレベル依存って書き込みがあるが、PS3版も固定だな。エンチャント効果一緒だし。多分スキルによる攻撃力変動で見間違えたんだな。 -- (名無しさん) 2007-11-27 00 12 19 久々にアリアス湖でマンカー・キャラモンを倒して遊んでいたら、洞窟内に留まらせることに成功。そのままメインクエストを進行させていたら、曇王の神殿に登場(クエストの進行、時間経過によるものかは不明)倒してみたら、楽園のクエストが完了になった。(倒さずに進行させ、楽園に行くと帰れなくなる。)その後も普通に進めて、メインクエストを終了することができた。このゲームの自由度の高さは、凄すぎる! -- (名無しさん) 2007-11-27 13 17 24 倒すって・・wあれってなかなか倒せない・・・orzもう一回がんばってみます(´ω`) -- (名無しさん) 2007-11-27 22 09 35 ↓の続きw よければどういう風に倒したのか教えてください>< -- (名無しさん) 2007-11-27 22 10 18 敵の倒し方なんて・・・ 知恵とテクニックとしか言えないじゃないんだろうか。そこまでメインクエストを進めた腕を持ってすればそんなに難しくは無いと思いますよ。 ところで、「クエスト クエストを受けるタイミング」の「後でやったほうがいいクエスト」で「追加クエスト:九大神の騎士 (Knights of the Nine) 」が「レベル24~」をお勧めとありますがこれは何故でしょうね? クエスト報酬=騎士の遺品は性能固定でレベル依存の報酬は無いように思うのですが。 -- (名無しさん) 2007-11-28 00 46 05 タイトルアップデートされましたね。ついにフォントの変更が・・・まあ多少は見やすくなったかな。 -- (名無しさん) 2007-11-28 01 01 47 メインクエスト暁の道でフィンティアスの好感度が80以上だと3巻を100Gで買えるようになる。4巻の情報はクヴィナスから結局聞かないといけないので払い損になるが・・・・・。 -- (名無しさん) 2007-11-28 02 02 37 ↓↓↓で敵の倒し方なんて・・・と書いてあるので具体的な方法は控えますが、ヒントとしては、ステータスに上限は多分無い。難易度は初期の状態でも余裕で倒せる、と言うことは? -- (名無しさん) 2007-11-28 13 40 10 後でやったほうがいいクエスト、編集しておきました。「九大神の騎士」に関しては情報お願いします。 -- (名無しさん) 2007-11-28 16 39 14 九大神の騎士で手に入る聖騎士の武具の強さは、手に入れた時のキャラLVに依存しているが、キャラがLVUPしてから、キュイラスがかけてあったところに武具を戻せば、キャラLVに応じた強さに変わる。 キャラLVいくつ以上で武具の強さがこれ以上上がらなくなるのかは未確認。 -- (名無しさん) 2007-11-28 17 10 46 九大神修道院に入いって稀にサウンドがきこえんくなる -- (むぽい) 2007-11-28 21 19 25 字幕のフォントが、見やすく改善されました。 -- (モッコシ) 2007-11-28 21 59 36 字幕が明朝体から丸ゴシックになって読みやすくなった反面、ファンタジックな雰囲気が損なわれたような気も。前の書体に戻すオプションは無いっぽい。 -- (名無しさん) 2007-11-29 11 26 42 速度と軽業を1000ぐらいまで上げたら、壁を貫通したり空を飛べる(と言うより飛ばされる)ようになった。まともに操作出来ないが、上空からの景色はわるくないです。 -- (名無しさん) 2007-11-29 12 16 10 今思ったけど、暗殺クエでどっかの衛兵の暗殺に「シシスのバラ」ってやつくれたけど。裸のやつじゃないと一撃じゃないのかな?鎧は×なのはわかってるけどw服では効くか試してほしい(oblivionディスク割れた)どなたかやってくださぃ>< -- (名無しさん) 2007-11-29 15 58 13 字幕のフォントパッチを当てるには、キャッシュクリアが必要になる。 -- (モッコシ) 2007-11-29 22 57 08 12月21日にナビゲーションガイド発売とのこと。 -- (名無しさん) 2007-11-30 08 46 52 ブラックボウの住処で有名な某洞窟で。ブラックボウと野党が争ってて、トカゲ女が崖上から崖下のブラックボウに矢をはなっていた。そしたら、相手の麻痺付の矢がとんできて、トカゲ女落下死しました。そのあとブラックボウと野党の装備はおいしくいただきました。ウマー( ゜Д゜) -- (名無しさん) 2007-11-30 14 55 39 生き別れ兄弟の「失われた遺産」で兄弟の家の近くにオーガがいないバグっぽいのが発生しました。 -- (名無しさん) 2007-11-30 19 45 45 マゾーガちゃんと一緒に住んでいる家で。なんか、家の中でマーティン待たせてたら、マゾーガが帰ってきて、数秒間マーティンと目を合わせた後戦闘にwこれってなんででしょうか?その後、マゾーガが死なないように、マーティンを斬りました( ´A`) -- (名無しさん) 2007-12-01 12 58 08 レベル依存のネラナタの王冠、初め手に入れたときはレベル25未満で性能低かったんだが、レベル25でウンバカノに渡して戻ってきたらレベル相当の強さに変更されてた。同じように、強さレベル依存の装備品は、手放して放置すると強さ変わるのかな? -- (名無しさん) 2007-12-01 14 36 16 闇の一党の「犯人は誰だ」のクエスト、明らかに他の人に見られてる前でもう一人を切り殺しても見付かったことにならなかった。ちなみに魔法で殺した場合は見付かった。クエストの方に書こうかと思ったけど、俺だけかもしれないから一応誰か検証してみて。 -- (名無しさん) 2007-12-02 03 03 42 マラキャスのクエで鉱山にはいって少しすると、オーガを解放していないにもかかわらず、「オーガを解放した」とクエスト更新されてしまいました。誰かなったひといます? -- (名無しさん) 2007-12-03 20 21 02 ↓自分もそうでした。まぁ手間がはぶけていいやとおもい気にせずスルーしましたがね。 -- (名無しさん) 2007-12-04 19 47 12 自分は暗殺ギルドもう2回クリアしているので三度目のセーブではやらないと決めていたが、魅力100、話術100で名声160悪名0最高賞金0で世界中の人間誰も戦ってくれませんでした。辛い魔法有効性100%で挑発100でもだめ。激乱加えると無実(ターゲットではない)人間が死んでしまう可能性があるので、暗殺ギルド始め悪名をやっと10まで上げたのですが、ドラコニス一家(洞窟の野生化、不法侵入で入っている帝都も、宿屋も)帝都は魔術師のフードで殺、洞窟はサングリンのバラ、宿屋はまじに考えさせられた。そこで値段交渉、利益重視で払えない金額の物を売るのコマンド連打。やっと気分0まで下げ襲い掛かってきたところ帝都兵が殺してくれた。あと帝都腐食した兵のオーディ-ンス俺が戦士ギルドのレノス商店の見張りしてたところいきなり入ってきて剣を抜刀したがやつは何もしてこない。話してみると高感度が46もある。ので話術と賄賂で100まで上げ魔力の剣装備させたら俺の変わりに店守ってくれた。( -- (WEBDEMON) 2007-12-04 20 49 52 オーディ-ンス現在は何故かまだ自分は監視兵だと勘違いしておりANVRILの案内してくれる。笑! -- (WEBDEMON) 2007-12-04 20 55 28 雑談ですが私逗子で柳生心眼流兵法・棒術に新陰流剣術(剣はちょっとだけ)教わっていたんですが、新陰流の技がアカヴィリ大剣で出来るんですよ。感激。剣を構えず敵の攻撃を待ちタイミングよく攻撃をはじきくと敵は右によろめく、そこに素早く(敵の視点から)左に動き敵の背後をとり3度切る。そして敵があせって自分の方を向こうとするので、逆方向に動き自分の素早さ+相手のあせった動きで再度敵の背後をとる。2回ほど切り敵の攻撃を回避し距離を空ける。LV.50難易度最大1対1なら攻撃を食らわなかった。(実験のため魔法・武器のエンチャントは使用せず)重装で盾持ってる敵はやはり日本刀では防具の隙間を突く攻撃では無いと剣の刃がすぐにぼろぼろに。(だからクエストかユニークな日本刀にはほぼ必ず防具破壊がエンチャントされている。信じられないぐらい奥が深いゲームだよ。魔法耐性100にして自分も魔法使わず遊ぶのも面白いですよ。ちなみに最強のゴブリン三匹(囲まれたしかも逃げ場無し)相手したときはさすがに剣折れました。武器を払い落とさせ奪ってもやつら格闘の達人でおそらく速度200は軽く超えてた上NPCなんかより断然に賢い戦術士死にそうになると他のやつが俺をラッシュ防御もせずに攻撃してきて、その間死にそうになったやつが逃げ援軍を連れてきた。しょうがなくダメージ反射101%装備で剣の(予備)魔力チャージして一匹ずつ3度素早く攻撃で制覇。(炎ダメージ25、炎耐性、魔法耐性ダウン100%/二秒)に破壊魔法(呪縛2秒、炎ダメージ100、スタミナ減退100、炎・魔法耐性ダウン2秒のコンビ。ちなみに一度でいいからデイドラ装備した白銀ゴブリン武将と1体1で勝負してみたいです。 -- (WEBDEMON) 2007-12-04 22 26 27 ↓&↓↓&↓↓↓ WEBDEMONさん、ここは「バグやゲーム内仕様について「提供・検証」する場所」です。物語のように長々書かれても非常に読みにくい。「旅の宿」を利用するか、書こうとしていることを良く見直してみてください -- (情報検証入門) 2007-12-04 23 32 08 すみませんでした。旅の宿がフォーラムとは知らなかったです。申し訳ございませんでした。 -- (WEBDEMON) 2007-12-05 00 22 59 モラグ・バルクエストで装備外した状態でやると、発生中の効果が全部無くなりました。 -- (名無しさん) 2007-12-08 19 36 47 水中で水上歩行のスキルが発動すると水中でもたいまつが焚けたんですけどこれはバグ?それとも仕様??? -- (オブリ初心者) 2007-12-08 22 37 30 装備へのエンチャントについて、どこかのページで「軽量化よりも腕力をエンチャントしたほうが最大荷重増加には効率が良い」という記述があったと思うのですが、これは何故でしょうか? 超越の印石を使った場合、腕力=最大+12=荷重換算60 軽量化=最大荷重+125 で、2倍以上の差がありますよね。もちろん腕力増加では近接武器の威力は上がりますが、魔法を主体とする人や刀剣スキルが非常に高い人には2倍の差を埋めるほどのアドバンテージにはならない気がします。 -- (名無しさん) 2007-12-09 02 44 35 バグを発見しました。自作呪文や武器などで敵(人間・動物)に同時に麻痺、速度低下100pts、魅力100ptsの効果を付呪すると自キャラが敵と戦闘中であるということをゲームが認識出来なくなり、戦闘中のBGMが消え、修理、錬金、待機など戦闘中にはできないはずの行動が出来る。目の前に立って攻撃していても一切反応無しだが、倒す前に効果が切れるとゲームがフリーズしたりすることもあるので注意。 -- (WEBDEMON) 2007-12-09 03 35 39 スタミナ=腕力、知力、気力、敏捷性の合計値ですので、いくらレベル上げて400が最大。でも腕力+12だと、スタミナも12上がる。軽量化125なんて、薬重量0.1で、272pts-880秒(しかも、使える材料も豊富。)変性魔法、天馬の翼250ptsー380秒(マジカ80程度) -- (WEBDEMON) 2007-12-09 05 26 07 2007-11-30 19 45 45 と同じバグを確認しました。遠くからオーがつれてきて倒してもアップデートならず(´・ω・`) -- (*1) 2007-12-09 13 23 35 ベニラス邸の亡霊を「魂縛」効果付きの武器で倒したところ、極大魂石が「極大」に充填されました。自分のレベルは21です。「魂縛」魔法を直に掛けての検証は行ってません。もしかしてベニラス邸のクエストを途中で止めておけば、極大の敵を養殖可能!? -- (名無しの冒険者) 2007-12-10 02 02 31 2007-11-30 19 45 45 と同じ現象は私も遭遇しました。どうもフォントパッチ当ててから発生した現象のように思います。 -- (名無しの冒険者) 2007-12-10 02 07 05 以前にコメントした麻痺+速度低下100pt、(魔法の有効性100%では無ければ、バグりませんが、武器に速度吸収と魔法耐性ダウン付呪でもなるので、気をつけて下さい。今オンラインで試してますが、BGMを消しているので、今のところ一応問題なく動いてますが、敵の速度が0になると、召還された生物も消えるのでバグりそうで、怖いです。 -- (WEBDEMON) 2007-12-10 02 22 20 召喚モンスターと同じくデイゴンも戦闘不能にすると、一瞬アイコンが出るので狙ってみたら、衛兵が放ったと思われる鋼鉄の矢が3本手に入った・・・デイゴン -- (名無しさん) 2007-12-10 12 39 00 ↓失礼 続きです。デイゴンが崩れ落ちてきた(かなり凄い事になります)時は、マーティンを死なせずに終わらせる事が出来るのかと思って期待したが、さすがに無理みたいです。因みに、マンカーを楽園に行かせない様にするのと似た方法で、マーティンが死んだ瞬間に神殿に入り、オートセーブのデータをロードすると、マーティンが死んでいるのにプレイ続行できます。マーティンのアイテムを奪ったりデイゴンと遊び続けられるが、他に何も出来ないです。 -- (名無しさん) 2007-12-10 12 57 05 炎、魔法の視覚エフェクト、ドア、トラップなどが突然動かなくなるバグが発生した。呪文の効果はあるが、可動式ドアの開閉ができないので、ふつうに進めることができなくなった。直前のデータをリロードしても同じようなところでバグるので、発生条件があるようだが詳細は不明。あと、バグる前までかなり長期間、これらの動作がものすごく高速で動いていた。魔法やドアが高速で動いている状態が長時間続いている人は注意した方がいいかも。 -- (Bo Peep) 2007-12-10 21 03 41 失われた遺産クエストでバグった人結構居るみたいだな。クエスト発生からずっと放置して、兄弟の話聞く前に家見つけちゃったせい(オーガも居なかったし)かと思ってたんだが、この様子だともっと起こりやすいバグなんだろか? -- (名無しさん) 2007-12-12 00 46 28 霊峰の指をキャラLV2でもらいました。雷:6ポイント-5fit 消費14。3または4でもらうのと同じです。 -- (名無しさん) 2007-12-13 19 05 20 Bo Peepさん私も同じバグで始めからやり直すことになりました。SPIKEはゲームエンジンについては、BETHESDAに聞かないと解らないそして、このバグについて問い合わせたのは私が始めで、セーブデータの復帰は不可能、で新しいDISCを買い別の360で試してくれと。実際試した結果やはり問題は破損したセーブ。原因はおそらく自家製魔法、近距離30ft位の吸収系のまぶしい青い光。自分は、ロックミルクで10人位から同時に吸収もう画面がまぶしすぎて、見えなかった。この後30分位で、全ての魔法の光や、たいまつの炎などが動かなくなった。炎ダメージ10ftとか連打したら町中が真っ赤にそまり高速移動してもそのまま。(光だけで誰にも危害を与えない上、NPCは気にせず。5分ほどしたら、ゲームが完全にフリーズして、何度本体電源切り、セーブをロードしてもすぐに必ずバグり、進行不可能になりました。でも、同じ本体にDISCで、始めからやり直したら二度とバグら無かった。海外版ではかなり前にPatchされていると友人から聞きました。(Shivering Islesでより酷くなったからアップデートされたらしい。(私の友人の話によると。) -- (WEBDEMON) 2007-12-15 11 07 25 クエスト「最強の盗賊に勝利あれ」ですが「速度のステータスが高ければ追いつく、もしくは追い越して先に取る事が可能」とありますが、速度は関係ないと思います。スタート直後に聞き込みなどを一切せずにワープすればほぼ同時に家に到着でき、相手は浸入後に摺り足を始めるので普通に歩いて追い抜いて机を漁る事でアッサリ勝てます。 -- (Lake) 2007-12-18 17 57 38 ↓その為には先に家を見つけておく必要がありますね。一回目ならちょっと無理かも知れんです。でもそんなに苦労するクエストでもないような・・・。ルートによっては全くライバルに追いつかれることなくたどり着けるし。 -- (Alice ice) 2007-12-20 06 47 36 バグではないですが、小技です。視点変更(RS)をおしながら、左右トリガーで距離感調整や、自キャラを正面から見たりできます。 -- (WEBDEMON) 2007-12-20 11 59 45 ↓・・・・・・。そんなのみんな知ってるでしょう?・・・・ -- (名無しさん) 2007-12-20 13 18 20 ・・・・・・。 -- (名無しさん) 2007-12-20 13 19 05 説明書に載ってるし・・・ -- (名無しさん) 2007-12-20 21 46 37 WEBDEMONさん、無意味な情報や無駄な長文投稿などの行為はご遠慮ください。 -- (管理人) 2007-12-20 23 33 12 世界の端の聖蚕会神殿の地下にいる「光無き○○」には、ハルメアス・モラの魂縛が効きません。恐らく、種族の設定が成されていない?のでしょう。他にもいるかも知れませんね。 -- (名無しさん) 2007-12-21 23 27 11 Bo Peepさんと同じ仕様が出ました。プレイ時間440時間ほど。360時間のセーブデータでは既に扉が素速く開く現象が起こってます。素因不明。私は自家魔法はまだ作っていません。因みにPS3版。あぁ・・下水道からか・・・。 -- (syuu-gen) 2007-12-23 00 18 27 2週目なので余裕かましながらレベル3でクヴァッチのオブリビオンの門に入ったら下降の印石を貰いました。一週目の時は潜在の印石だったのに…。 -- (名無しさん) 2007-12-23 21 03 50 バグ報告・・・追加プラグインクエスト「九大神の騎士」全編クリア後「ステンダールの慈愛」に出てくるケレンが『気を失っています』と左上に出まくる。助けたくてもキャラクターが何処にも居ないため、見殺しのままプレイし続ける羽目に。不死身キャラらしく、繰り返しメッセージがでるため非常にうるさい。(いや、煩いだけなんで特に問題は無いんですがね)他に同じ状況の方が居ますでしょうか? -- (名無しさん) 2007-12-24 02 18 10 闇の一党ギルドクエスト終了後、新たな仲間がアジトに来ますよね。その仲間を連れ出したりして死んでしまったときは、もう仲間は増えないのでしょうか?仲間を増やせる事ができるんでしょうか? -- (名無しさん) 2007-12-24 21 53 10 吸血鬼の治療薬で必要な「空の極大魂石」ですが、フラヴィルの魔術師ギルドのアルダリンから買えました。載せていただけるとありがたいです。 -- (名無しさん) 2007-12-25 00 38 20 ↓極大のものに限らず、魂石は各地の魔術師ギルドや帝都のミスティック大商店などで買えます。ただ在庫がランダム?なようで、あったり無かったり、極大(極小入り)ばかりだったり、で「ここなら絶対買えます!」といった場所は基本的に存在しない気がします。 -- (名無しさん) 2007-12-25 00 57 56 ↓あら…そうなんですか; 一応ほかのギルドのは載っていたので、他のギルドでは販売してないんだと思ってましたので、書き込んだ次第です。お騒がせしましたm(_ _)m -- (名無しさん) 2007-12-25 01 13 40 改めて…。吸血鬼の治療薬で必要な「空の極大魂石」、魔女の家から西にあるダンジョン「ノルナル」の奥地にて発見。スケルトンガーディアンが護ってる部屋にあります。 -- (名無しさん) 2007-12-25 03 30 12 空の極大魂石ってギルドの展示品で置いてたりしませんか? たしかコロールの魔術師ギルドで展示箱に入ってたような……。展示箱の中身ってランダムでしたっけ? -- (名無しの冒険者) 2007-12-25 03 54 14 ↓置いてるようですが、鍵がかかってたような覚えが…。取り出せなくて苦労しました…。 -- (名無しさん) 2007-12-25 04 20 43 モドリン、マーティン、エヴァースキャンプ4匹を連れた状態でダンジョン入ってしばらく探索しているとフリーズするようになりました。洞窟は大丈夫でしたが、どうもアイレイドの遺跡や砦などのガスが噴射する罠があるダンジョンで起こるように思います。私の場合ダンジョン内でセーブしてしまい外に出る前にフリーズしてしまうので進行不可になりかかりました(諦めきれるはずもなく20回くらいやり直し何とか脱出)。同じ条件または従者を沢山連れた状態でダンジョンに入る方は注意した方がいいかもしれません。 -- (名無しさん) 2007-12-26 21 15 15 失われた遺産のクエストなんだけど、オーガ倒してもなんもイベント進まない・・・井戸の近くいってもやっぱなんもおこらんのよ・・・。誰かボスケテ -- (名無しさん) 2007-12-28 03 09 26 Lv21 ファイアライトにて吸収のアミュレット(呪文吸収20)入手しました -- (名無しさん) 2007-12-28 14 36 57 血友病にかかった状態で睡眠を取って吸血鬼化したため、寝る直前のデータをロードして治したら……血友病は治ったものの、町の人から吸血鬼扱いされました。 -- (名無しさん) 2007-12-29 14 40 13 コロールの家具に召し使い区画があるんだけどエイジャのほかにメイドっているのかな? -- (名無しさん) 2007-12-29 21 49 53 マラキャスイベントで行く「荒れ果てた鉱山」、左奥の宝箱がレア箱っぽいです。マラキャスイベント後なら敵出現なしで、LV12で碧水晶武器が拾えました。武器はほぼ確定で、あとたまにスキル書が出ます。 -- (名無しさん) 2007-12-31 10 45 47
https://w.atwiki.jp/ilu_jg/pages/31.html
MODを導入する際の注意事項や導入方法・その他解析結果などをメモするページです。 【お願い】 長文になる場合や特筆したい事項の場合はコチラから新規ページを作成してそのMODや解析結果についてまとめてみてください。MOD・ツール関連の情報でしたら自作MODの解説ページや発表・宣伝などでもOKです。 新規ページを作成し分かりやすくまとめてくださると 後の改造を行おうとする方や現在改造を行っている方の導入・解析・新規MOD作者のMOD制作がスムースに進み 今後の改造有志の活動が快適になるので、コメントやメモだけではなく、出来るだけ新規ページの作成にもご協力をお願いいたします。 作成したページはこちらでまとめてください。 ※編集ページの「プラグイン」→「フォーム設置」→「コメントフォーム3」をクリックすることで自分だけの簡易掲示板を作成したページ内に設置することも可能です。感想やコメントが欲しい場合などにご活用ください。 ※wikiへのファイルのアップロード方法はコチラで確認できます。 リアマムを指定してるとこはどうやらjcp04_00_00のSmoza00のsviファイルの部分のもよう、これを消すと唯一ついてく1番上のツルマン部分がついて行かなくなるとこから考えるにこちらで指定してると考えられる、これを編集出来るツールがあれば浮かないリアマン作れるのでは無いかと思うけど何分ツール関係はずぶのド素人なのでさっぱり…(汗)興味のある職人さんよろしくお願いします。 -- (名無しさん) 2011-06-24 19 57 53 名前 コメント すべてのコメントを見る .
https://w.atwiki.jp/titanquest/pages/52.html
お手軽MOD お手軽MOD はじめに 実行解説 用意する物 手順1 『解凍』 手順2 『置き換え』 手順3 『ArtManagerでデータ改変』 手順3.5 『弄る』 手順5 『database再加工』 手順6 『差し替えて起動』 完 改造したTQはシングルorLANでしか遊べないので注意。 はじめに ArchiveEditorなどを使って、イチからMODを作ろうとすると死ぬほど手間が掛かる。 でも、なんとか設定だけでも弄って、自分だけのTQを作れないだろうか? 具体的に何をするのかと言えば、 『database.arzを書き換えてみる』ということ。 つまりTQのゲームバランスに手を加えるだけの、 インスタントMODの作成について説明するコーナーです。 実行解説 database.arzとは、TQのデータを格納しているアーカイブの一つ。 具体的にどのようなデータを保存しているかというと、 装備品・スキル・モンスターの能力やドロップアイテム、 クエストの報酬といった、ゲームバランスに関係するデータが保存されてる。 こいつらを編集することによって、TQの外観を全く変更することなく、 全く別のゲームバランスでTQを遊ぶことが出来る。 例えば、駄目駄目なSpiritを強化してあげたり、 ただでさえ強力なHuntingをパワーアップさせてみたり、 ユニークなだけで大したうまみのないユニーク共から素敵アイテムをゲットできるようにしたりと様々。 用意する物 1.Titan Quest 2.TQVault(database.arzを解凍するのに必須) 3.取り合えず400Mは空き容量を確保 手順1 『解凍』 database.arzは簡単に説明すれば箱のような物で、 この中にMonsterやSkill、Itemというふうにジャンル分けされたデータが入っているが、 箱の中に入れたままじゃ、中身は差し替えられない。 では最初にdatabase.arzの中身を抽出することから始めよう。 TQVault、普通はTQのキャラクター間でアイテムをやり取りするツールだが、 どういうわけだか、.arzを解答するための機能が搭載されている。 DLは↓からどうぞ。(もし消えてたらググれ。zipがなんだかわからない奴もググれ) http //titanquestvault.ign.com/fms/Download.php?id=1878 TQVaultを起動するには、TQVaultをTQと同じ場所に置く必要がある。 デフォルトパスはC \Program Files\THQ\Titan Quest\ TQVを適当に起動するとExtract database.arzというボタンがるからクリック。 解凍するフォルダを聞かれるので、自分の好きな場所に置く。 例としてC \Program Files\THQ\Titan Quest\DATAに解凍。 ちょっと時間が掛かるの。 取り敢えず前準備の一つは完了。 手順2 『置き換え』 次にデータをコンパイルする時のために、完全なdatabaseを作成しておく。 TQのインストールフォルダにある、ArtManager.exeを起動。 初回起動時に色々と使用するフォルダを聞かれるので、これも好きな場所を選択。 このテストでは上から C \Program Files\THQ\Titan Quest\Work C \Program Files\THQ\Titan Quest\Build を選択。三番目は自動的に読み取られるはずなので弄らなくて良し。 OKをクリックすると、上で選択した場所にフォルダが作成される。 ArtManagerのツールタブからMod Newを選択、これから作るMOD名を入力する。 これはテストなのでやっぱりTestと入力する。 するとさっき作ったWorkフォルダの中に、Custommaps\testというフォルダが出来る。 このtestというフォルダの中に、さらにdatabaseというフォルダがある。 このフォルダは今作ったばかりで空っぽで、これをdatabase.arzとして再加工しても、 からっぽの箱が出来るだけで、なんの意味もない。 というわけで、さっき解凍した箱の中身である、C \Program Files\THQ\Titan Quest\DATAの中身を移し替える。 dataフォルダに先ほどdatabase.arzを解凍した300MBほどのrecordsというフォルダがあるので、 これをC \Program Files\THQ\Titan Quest\Work\Custommaps\Test\databaseにフォルダを丸ごと移動する。 これでようやく、データを弄る前準備が完了する。 手順3 『ArtManagerでデータ改変』 前準備が終わったところで、いよいよデータ改変。 ArtManagerを起動し、Help→InstallTemplatesでテンプレートファイルを読み込む。 次にツールタブのMod SelectにTestという項目が上がっているはずなので選択。 ちょっと読み込みに時間が掛かったら確実に成功。 ArtManager中部にSource Assets Databaseの三つのタブ。 Databaseを選択するとrecordsから派生する色々なツリーが出てくる。 目的のファイルは全てフォルダ名と同様の場所に格納されている。 Creature Item Quest Skillsの4つがメインとなるだろう。 Skills\には下層フォルダとして、色々なMasteryが格納されている。 ここではSpiritを強化していく方針を立てる。 Spiritフォルダを選択すると、さらに4つの下層フォルダのほか、 現行のVer(1.20)で使用されているスキルが、右上のウィンドウに表示されている。 では、最も強力なスキルであるTernionを強化しよう。 Ternionをダブルクリック! すると、何故かエラーが出てエディターが起動しない。 これは自分の固有の環境かもしれないが、 とにかく出来ないので、上位スキルのArcaneLoreを強化することにする。 一覧からternion_arcanelore.dbrをダブルクリックすると、ついにエディタが起動。 (追加 Ternionを弄るとエラーが出るのは、Ternionを記述するために必要なテンプレートファイルが、 何故か存在していないというトンデモエラーによるものらしい。 このエラーを解決しないと、TQ内でTernionを使うことが不可能になってしまう。 また、同様のエラーが全ての召喚系でも起こるため、 自家用アーカイブを作るためには、必ずこのエラーを修正する必要がある。 (IT発売中の現在では、ITのテンプレートを利用することで、 このエラーを防げる可能性がある。要検証。 IT用テンプレートはこちら。 http //www15.atwiki.jp/titanquest?cmd=upload act=open pageid=37 file=TQIT-Templates.rar 修正するには新しいテンプレートファイルを作ってあげればよい。 C \Program Files\THQ\Titan Quest\Work\Databaseにテンプレートファイルの一覧があるので、 適当な発射系スキルのテンプレートをコピペした後、 Editor項目のHeader Classに記述されているテンプレートファイル名にリネームすれば、 Ternionを改造することが出来る。 ただし、ternionはよっぽど変な記述をされているのか、 この方法を使っても、ゲーム中ではTernionのモーションを空振りするだけで、杖による攻撃が出ない……… もう、この方法を解決するには、適当なProjectileを発射するように改造するしかない。 SkillConfig SkillProjectileNameを選択し、 Effect\から適当なProjectileを割り当ててあげれば解決するかも。 ペットが出現しないバグを解決するには、 Template\Monster.tplをコピペした後、Skill_Spawnpetにリネームするだけで解決する) さらに、巨大石像のMonster用のテンプレファイルも存在しない。 必要なファイルはSpiritHost.tpl。 これもMonster.tplをコピペし、同ファイル名に差し替えることで解決可能。 手順3.5 『弄る』 エディターが起動すると、左上に大まかな分類項目、右上に各小項目が並ぶ。 各項目の説明は、おおむねこんな感じ。 Modifier - 消費マナ・リチャージ・効果時間・効果範囲等 Projectileconfig - 発射角度・発射数・貫通確率・作用範囲等 Skillconfig - 習得に必要なマスタリ・最大Lv・ブースト込みの最大Lv その他スキル事の固有数値等 Qualifyingweapons - このスキルを利用できる武器(0-1で制御) Defensive Parameters - 主に防御に関わる項目 Offensive " - 攻撃に関わる項目 Retaliation " - だいたいの場合、反撃に関わる項目 Character " - 作用するキャラクターのステータス変動に関わる項目 Skill " - マナorリチャージコスト減少・発射速度の増加等 Racial Bouns - 特定種族に対するボーナス (細かい項目については、ゲーム用の英語が身に付いてれば何とかなる。または翻訳でググれ) Spiritでも特別特殊なスキルとして存在感を放つTernion。 だがTernion本体を編集しようとするとどうしてもエラーが出るので、 Ternionを強化するには派生スキルのArcaneloreを強化するしかない。 とりあえずArcaneloreをLv1になった時の効果を、 『消費マナ0+前方30度に10WayShot+貫通確率20%+弾速100%Up+Volcanoと同じ爆破範囲+ElementalDdamege50%Up』に変更してあげたいと思う。 まず消費マナから。 Modifier skillmanacostを0に変更。これだけでOK。 (各項目の数字の部分をダブルクリックすると、書き換えモードに変わる。 説明するよりやったほうが早いので、この辺は色々と自分で試す) 次にProjectileconfigにて、発射角度・発射数・貫通確率・爆破範囲を設定。 Launchrotation・Launchnumber・Piercing・explosionradiusの順に該当。 上から30・10・20・3に変更すれば、 『前方30度に・10発分・貫通確率20%の・範囲3の攻撃を発射する』という設定になる。 (実際はThernionの3発があるので13発) 続いて、ElementalDamageの付与に関して、Offensive Parameters Offensive Elemental。 目的の小項目はOffensiveelementalmodifier。 これを50にすることで、攻撃に50%のElementが追加される。 ちなみに50ダメージのElementを追加したいなら、OffensiveelementMinを50にすればよし。 OffensiveMaxを50にし、Minを1にした場合は、 その攻撃のダメージは1~50ということになる。 最後にSkillparameters ProjectileBonus Projectilespeedmodifierを100にすることで、 弾速100%Upの弾に変化する。 ツールタブ File Saveで保存するか、そのままクローズすることで、 変更を保存するかどうかのダイアログ表示に切り替わるのでYesを押せばよし。 ―――――タブの使い方――――― 手入力でデータを弄ると時間が掛かるため、 エディター内のタブツールを使うことで編集を楽に出来る。 Artmanagerで編集したいファイルをダブルクリックすると、エディターが開く。 さらに、パラメータなどの編集したいファイルを選択するともう一つエディターが開く。 このエディターの上部に出てるのがタブ。 上から[SetAll] [Incr All By] [Incl All By%] [Inc By Series]となっている。 上から説明すると、 [一括で指定した数値に設定] [全てに指定した数値を追加] [全てに指定した数値の%を加算] [全てに1の倍数を加算] 例えば、0から始まるステータスにInc By Series 1を入力した場合、 内部データは1-2-3-4-5-6-7-8-9といった内容に書き換えられる。 Lvが上がる事にステータスが変動するスキルなどは、これを使って編集するといい。 なお、数値にマイナスを用いることで減算も可能。 ―――――――――――――――― 保存に成功すれば、データ弄りは完了。 今までのThernionがオルトロスなら、今のThernionはティアマト。 では最後に、このデータをTQに反映させるための仕上げになる。 手順5 『database再加工』 無事Thernionを強化することに成功したので、 この新データを新しいdatabase.arzとして作り直す必要がある。 やり方は超簡単、さっきから開きっぱなしのArtManagerを見る。 ツールタブ Buildでrecords内部のdatabaseの加工が始める。 結構時間が掛かるので注意。 描こうが終了すると、databaseファイルはArtManagerが指定したフォルダにアーカイブを作っている。 この場合は、手順1で解説したとおりC \Program Files\THQ\Titan Quest\Build。 いくつかフォルダを移動すると、26MB程度のTest.arzが出来ているはず。 (出来てなかったらエラーが起きてる。 本当ならデータ改変も出来ないはずなので、謎のエラーということになる。 もしそうなったら、ググったり海外のフォーラムで専門家に聞け) 手順6 『差し替えて起動』 C \Program Files\THQ\Titan Quest\databaseの中にある、database.arzを適当な名前にリネームしたら、 Test.arzをdatabase.arzにリネームして、上のファイルと差し替える。 あとはいつも通りTQを起動するだけで、超Alcaneloreの使えるTQがプレイできるはず。 (この方法で作成したMODを使用した場合、 チュポン撃破後に出現するクリアポータルが出現しないバグが発生する。 各Actを終了させたい場合は、一度デフォルトのDatabaseに戻してからチュポンを倒し、 ゲートをくぐってから、もう一度Modを入れ直せばいい) 完 RadiusだのModiferだのといったゲームらしい英語さえわかれば、Editorの使い方は非常に簡単。 強いて言うとすれば、ちゃんとやろうとすると時間が掛かるのは底なしってコト。 複数のファイルを同時で一括に編集するといったことも出来るので、 ある程度の時間短縮は可能。 わからなかった人は、なにからなにまでググってみよう。 というか↓のサイトが読めれば、MODについては1から10まで理解できる。 http //titanquestvault.ign.com/ 読めなかったらエキサイト翻訳↓。 http //www.excite.co.jp/world/ 改造したTQはシングルorLANでしか遊べないので注意。 LANでマルチをする場合は、他のPCにも同じdatabaseを配る必要がある。 Ping高くても外人とブイブイ言わせるぜー、みたいな人には縁がない世界のはず。 TQ改造したら起動しなくなったとか、改造が上手くいかなかった、 という問題について、当ページは一切解答しないと思われます。 Wiki管理人やその他勤勉な編集者各位のGoサインがない限りは、 ここらのコメントログで聞くのもやめといた方が良いと思われます。 2chの現行スレなんかも同様にオススメしない。 真剣にこの頁に書いてあるようなことを実行したいなら、 http //titanquestvault.ign.com/にて勉強するといいでしょう。
https://w.atwiki.jp/minecraft_psp/pages/7.html
RedStone Mod Winter Edition v4.0.0 v3.1.1(仮) v3.0.0 Winter Edition ダウンロード http //ux.getuploader.com/Lamecraft_wiki2/download/1/Winter_Edition.zip v4.0.0 ダウンロード http //ux.getuploader.com/Lamecraft_wiki/download/25/RS_Mod_v4.0.0.zip v3.1.1(仮) ダウンロード http //ux.getuploader.com/Lamecraft_wiki/download/22/RS_Mod_v3.1.1.zip v3.0.0 ダウンロード http //ux.getuploader.com/Lamecraft_wiki/download/20/RS_Mod_v3.0.0.zip
https://w.atwiki.jp/izumikomine/pages/13.html
使用MOD 前提MOD(導入しないとログインができない)Mod Loader 利用MOD(必要ではないが導入したほうが捗る物)nihongoMOD Rei's Minimap SpawnChecker Scouter 使用プラグイン Dynamp TreeAssist Nolagg rTriggers Backup
https://w.atwiki.jp/oblivion1/pages/30.html
目次 目次 iron Steel Dwarven Orcish Ebony Daedric iron 名称 重さ 価格 耐久度 防御力 Iron Helmet 6.0 25 150 4.0 Iron Gauntlets 6.0 25 150 4.0 Iron Shield 12.0 45 225 12.0 Iron Boots 9.0 25 150 4.0 Iron Greaves 18.0 45 225 6.0 Iron Cuirass 30.0 85 300 10.0 Steel 名称 重さ 価格 耐久度 防御力 Steel Helmet 7.0 50 250 4.5 Steel Gauntlets 7.0 50 250 4.5 Steel Shield 14.0 95 375 13.5 Steel Boots 10.5 50 250 4.5 Steel Greaves 21.0 95 375 6.75 Steel Cuirass 35.0 180 500 11.25 Dwarven 名称 重さ 価格 耐久度 防御力 Dwarven Helmet 8.0 115 400 5.0 Dwarven Gauntlets 8.0 115 400 5.0 Dwarven Shield 16.0 600 525 15.0 Dwarven Boots 12.0 115 400 5.0 Dwarven Greaves 24.0 210 600 7.5 Dwarven Cuirass 40.0 400 800 11.25 Orcish 名称 重さ 価格 耐久度 防御力 Orcish Helmet 9.0 250 600 5.5 Orcish Gauntlets 9.0 250 600 5.5 Orcish Shield 18.0 460 900 16.5 Orcish Boots 13.5 250 600 5.5 Orcish Greaves 27.0 460 900 8.25 Orcish Cuirass 45.0 940 1200 13.75 Ebony 名称 重さ 価格 耐久度 防御力 Ebony Helmet 10.5 550 950 6.0 Ebony Gauntlets 10.5 550 950 6.0 Ebony Shield 21.0 1000 1425 18.0 Ebony Boots 15.75 550 950 6.0 Ebony Greaves 31.5 1000 1425 9.0 Ebony Cuirass 52.5 1900 1900 15.0 Daedric 名称 重さ 価格 耐久度 防御力 Daedric Helmet 12.0 1350 1350 7.5 Daedric Gauntlets 12.0 1350 1350 7.5 Daedric Shield 24.0 2025 1500 22.0 Daedric Boots 12.5 1350 1350 7.5 Daedric Greaves 36.0 2500 2025 11.25 Daedric Cuirass 60.0 4800 2700 18.75
https://w.atwiki.jp/lisguild_minecraft/pages/14.html
マルチサーバー hamachi準備中 使用しているMOD一覧 [[]] 日本語化MOD 棒読みちゃん準備中
https://w.atwiki.jp/bannerlord/pages/89.html
クエストの構造 サンプルクエストExampleIssues テスト サンプルクエストの肉付け発生の条件 条件消滅 発生の影響 解決手段 進捗状況 報酬 決着の影響 Quest の中断 会話の作成 サンプルクエスト最終形 クエストの構造 我々が一般に「クエスト」と呼んでいるものは、NPC の抱える問題を表す Issue と、その解決手段から成り立っています。 解決手段は、 プレイヤーによる直接解決である Quest コンパニオンによる代理解決である Alternative Solution 自領で発生した Issue にのみ実行可能な Lord Solution に分類できます。 クラス構造は以下のように、Issue と解決手段を Behavior でくるんでゲームに組み込む、という形になっています。 using TaleWorlds.CampaignSystem; public class Behavior CampaignBehaviorBase { internal class Issue IssueBase { // Issue 自体の定義 // Alternative Solution 関連の定義 // Lord Solution 関連の定義 } internal class IssueQuest QuestBase { // Quest の定義 } } Alternative/Lord Solution は会話や数値のやり取りだけで完結するため、IssueQuest のようなクラスはありません。 以上に加え、データを保存するための SaveableCampaignBehaviorTypeDefiner というクラスも使用します。 サンプルクエスト ExampleIssues プロジェクト名は ExampleIssues としています。 プロジェクトのファイル構成は以下のようになります。 ExampleIssues Main.cs VillageNeedsFood.cs (さらに自分で試作 Issue を増やしていくならファイルを追加) Main.cs using TaleWorlds.CampaignSystem;using TaleWorlds.Core;using TaleWorlds.MountAndBlade; namespace ExampleIssues{ public class SubModule MBSubModuleBase { protected override void OnGameStart(Game game, IGameStarter gameStarterObject) { base.OnGameStart(game, gameStarterObject); if (game.GameType is Campaign) { CampaignGameStarter campaignGameStarter = (CampaignGameStarter)gameStarterObject; campaignGameStarter.AddBehavior(new VillageNeedsFoodBehavior()); // 他にも Issue を作ったなら // campaignGameStarter.AddBehavior(new Issue01Behavior()); // campaignGameStarter.AddBehavior(new Issue02Behavior()); // campaignGameStarter.AddBehavior(new Issue03Behavior()); // のようにまとめて登録します。 } } }} VillageNeedsFood.cs + クリックで展開 using Helpers;using System;using TaleWorlds.CampaignSystem;using TaleWorlds.Core;using TaleWorlds.Localization; namespace ExampleIssues{ public class VillageNeedsFoodBehavior CampaignBehaviorBase { private const float IssueDuration = 30f; private const float QuestTimeLimit = 10f; private const float IssuePreConditionMinPlayerRelation = -10f; public override void RegisterEvents() { CampaignEvents.OnCheckForIssueEvent.AddNonSerializedListener(this, OnCheckForIssue); } public override void SyncData(IDataStore dataStore) { } // イベントリスナーです。 private void OnCheckForIssue(Hero hero) { // 詳しいことは分かりませんが、条件に合う Hero が見つかると // 指定した頻度で Issue が生成されるという感じでしょうか。 if (ConditionsHold(hero)) { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( new PotentialIssueData.StartIssueDelegate(OnStartIssue), typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon, null)); } else { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon)); } } // Hero が Issue を持つのに必要な条件を設定しています。 private bool ConditionsHold(Hero issueOwner) { return issueOwner.IsNotable; } private IssueBase OnStartIssue(in PotentialIssueData pid, Hero issueOwner) { return new VillageNeedsFoodIssue(issueOwner, DefaultItems.Grain); } // ---------------------------------------------------------------- // Issue に対する Behavior の定義はここまで。 // // ここからは、カスタム型を保存するためのクラスです。 // ---------------------------------------------------------------- // カスタムビヘイビアーで使用する型を登録します。 public class VillageNeedsFoodBehaviorTypeDefiner SaveableCampaignBehaviorTypeDefiner { // saveBaseId は、自分のビヘイビアー同士はもちろん、同時使用している他の MOD とも被ってはいけないそうです。 // また、番号を途中で変えるとセーブデータ読み込み時にクラッシュします。 // 番号付け規則は、追々コミュニティー内で意思統一が図られることでしょう。 public VillageNeedsFoodBehaviorTypeDefiner() base(001_123_456) { } // このクエストで使う独自のクラスを登録しています。 // // 構造体型なら SaveableTypeDefiner.DefineStructTypes() // 列挙型なら SaveableTypeDefiner.DefineEnumTypes() // のようにメソッドが分かれています。 protected override void DefineClassTypes() { // こちらの saveId は、各 SaveableCampaignBehaviorTypeDefiner の中で被りが無ければいいようです。 AddClassDefinition(typeof(VillageNeedsFoodIssue), 1); AddClassDefinition(typeof(VillageNeedsFoodIssueQuest), 2); } } // ---------------------------------------------------------------- // カスタム型の宣言はここまで。 // // ここからは Issue 本体の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssue IssueBase { [SaveableField(10)] private readonly ItemObject _requestedFood; // IssueBase.IssueBase() に渡す日数は、Issue が自然消滅するまでの日数です。 // クエストの達成期限と混同しないようにしてください。 public VillageNeedsFoodIssue(Hero issueOwner, ItemObject requestedFood) base(issueOwner, CampaignTime.DaysFromNow(IssueDuration)) { _requestedFood = requestedFood; } // Issue のタイトルです。 // 町などで Issue を抱えている人物のポートレートに表示されます。 // Quest のタイトルとは同じにも別にもできます。 // // チートコードで IssueOwner を探せなくなるので、テストでは日本語名は避けた方がいいです。 public override TextObject Title = new TextObject("Village Needs Food"); // Issue 内容の簡単な説明です。 // IssueOwner のポートレートで Title にマウスカーソルを合わせるとホバー表示されます。 public override TextObject Description { get { TextObject textObject = new TextObject("{ISSUE_OWNER.LINK} が食糧を届けるよう頼んでいる。"); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); return textObject; } } // 導入部のセリフのオーバーライドです。 public override TextObject IssueBriefByIssueGiver { get { TextObject textObject = new TextObject( "{FOOD} が乏しくなっているのですが、 " + "近くの町でもあまり手に入らないのです。 " + "このご時世、あまり遠方へ買い求めに行くことも " + "できず、困っております。"); textObject.SetTextVariable("FOOD", _requestedFood.Name); return textObject; } } public override TextObject IssueAcceptByPlayer = new TextObject( "何か私にできることはあるか?"); public override TextObject IssueQuestSolutionExplanationByIssueGiver = new TextObject( "いずこかで買い求め、持ってきてはいただけませ " + "んでしょうか? 報酬はお支払いいたします。"); public override TextObject IssueQuestSolutionAcceptByPlayer = new TextObject( "わかった、やってみよう。"); // コンパニオンに解決を任せられるか否かです。 public override bool IsThereAlternativeSolution = false; // 領主として影響力を消費して解決できるか否かです。 public override bool IsThereLordSolution = false; // 要求される食糧の量です。 // クエスト難易度でスケーリングしています。 private int RequestedFoodAmount = (int)(15f + (30f * IssueDifficultyMultiplier)); // Issue が自動生成される頻度です。 // IssueFrequency.VeryCommon // IssueFrequency.Common // IssueFrequency.Rare public override IssueFrequency GetFrequency() { return IssueFrequency.VeryCommon; } // Issue が消滅する条件を設定できます (StayAlive なので、正確には「消滅しないための条件」です)。 // // 例えば、この Issue が「物資を依頼人とは別の人のもとに届ける」というような内容だった場合、 // 届け先の人物が何らかの理由でゲームから退場してしまったら、その時点で Issue は破棄されなければなりません。 // (もちろん、プレイヤーが既にクエストを請けていればクエストも中止されるべきですが、それは Quest 側の仕事です。) // それには、以下のような感じにします。フィールドはあくまで一例です。 // bool IssueStayAliveConditions() = _targetNotable.IsActive; public override bool IssueStayAliveConditions() { return true; } // プレイヤーが Issue 解決を請け負えるかどうかの条件を設定できます。 protected override bool CanPlayerTakeQuestConditions( Hero issueGiver, out PreconditionFlags flag, out Hero relationHero, out SkillObject skill) { // 各条件に対応する PreconditionFlags でビットマスクをかけていきます。 flag = PreconditionFlags.None; relationHero = null; skill = null; // 友好度が低いと受けられないようにする。 if (issueGiver.GetRelationWithPlayer() IssuePreConditionMinPlayerRelation) { // このフラグを立てたときには、誰と仲が悪くて受けられないのかを返す必要があるようです。 flag |= PreconditionFlags.Relation; relationHero = issueGiver; } // 所属国同士が戦争中だと受けられないようにする。 if (issueGiver.MapFaction.IsAtWarWith(Hero.MainHero.MapFaction)) { flag |= PreconditionFlags.AtWar; } // いずれかのフラグが立っていると false が返るので請け負えなくなります。 return flag == PreconditionFlags.None; } // 詳細不明。公式の Issue でもほぼ使われていません。 protected override void CompleteIssueWithTimedOutConsequences() { } // Quest の発行処理です。 // コンストラクターに渡す日数は Quest の達成期限です。 protected override QuestBase GenerateIssueQuest(string questId) { return new VillageNeedsFoodIssueQuest( questId, IssueOwner, RequestedFoodAmount, _requestedFood, RewardGold, CampaignTime.DaysFromNow(QuestTimeLimit)); } protected override void OnGameLoad() { } } // ---------------------------------------------------------------- // Issue の定義はここまで。 // // ここからは Quest の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssueQuest QuestBase { // これらのフィールドは、セーブ/ロードをまたいで保持されるべき数値なので、SaveableField 属性を与えています。 // SaveableCampaignBehaviorTypeDefiner の宣言だけではダメなようです。 [SaveableField(10)] private readonly ItemObject _foodToBeDelivered; [SaveableField(20)] private readonly int _numFoodToBeDelivered; // Quest のタイトルです。 // ジャーナル (クエストログ) に表示されます。 // Issue のタイトルとは同じにも別にもできます。 public override TextObject Title = new TextObject("村が食糧を求めている"); // ジャーナルで達成期限を非表示にするか否かです。 public override bool IsRemainingTimeHidden = false; private TextObject QuestAcceptLog { get { TextObject textObject = new TextObject("{SETTLEMENT.LINK} の {QUEST_GIVER.LINK} に、{REQUESTED_FOOD} を持ってくるよう頼まれた。 報酬として {PAYMENT}{GOLD_ICON} を払ってくれるそうだ。"); StringHelpers.SetSettlementProperties("SETTLEMENT", QuestGiver.CurrentSettlement, textObject); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _foodToBeDelivered.Name) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } private TextObject QuestSuccessLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} のもとに、約束していた食糧を届けた。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } public VillageNeedsFoodIssueQuest( string questId, Hero questGiver, int numFoodToBeDelivered, ItemObject foodToBeDelivered, int rewardGold, CampaignTime duration) base(questId, questGiver, duration, rewardGold) { _numFoodToBeDelivered = numFoodToBeDelivered; _foodToBeDelivered = foodToBeDelivered; SetDialogs(); InitializeQuestOnCreation(); } // クエスト進行中にゲームをセーブ - ロードした場合の初期化はここで行われます。 protected override void InitializeQuestOnGameLoad() { SetDialogs(); } // 会話の流れと、それに伴う処理のデリゲートを設定します。 protected override void SetDialogs() { OfferDialogFlow = DialogFlow.CreateDialogFlow(IssueManager.IssueClassicQuestStartToken) .NpcLine("お手数ですが、よろしくお願いいたします。") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestAcceptedConsequences)) .CloseDialog(); DiscussDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.QuestDiscussToken) .NpcLine("お頼みした仕事の首尾はいかがですかな?") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .BeginPlayerOptions() .PlayerOption("うむ、ここに持ってまいった。") .Condition(new ConversationSentence.OnConditionDelegate(PlayerHasFood)) .NpcLine("おお、ありがとうございます。 それでは、こちらをお納めくだされ。") .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestFinishedConsequences)) .PlayerOption("いま取り組んでいるところだ。 しばし待たれよ。") .NpcLine("さようですか。 何卒よろしくお願いいたします。") .EndPlayerOptions() .CloseDialog(); // QuestCharacterDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.CharacterTalkToken); } // 以下、会話の特定の段階で実行される処理です。 // クエストを請けたとき private void QuestAcceptedConsequences() { AddLog(QuestAcceptLog); // これを呼ぶだけで、通知の表示や効果音再生など、クエスト開始に伴う処理が自動的に実行されます。 StartQuest(); } // クエスト目標をクリアしたとき private void QuestFinishedConsequences() { TransferFoodFromPlayerInventory(); AddLog(QuestSuccessLog); // クエストがどういう結果に終わったのかを QuestBase に知らせる必要があります。 // CompleteQuestWithSuccess() なら成功 // CompleteQuestWithFail() なら失敗 // CompleteQuestWithCancel() なら中止 // CompleteQuestWithTimedOut() なら期限切れ // CompleteQuestWithBetrayal() なら依頼人を裏切る形での決着 CompleteQuestWithSuccess(); } private bool PlayerHasFood() { return PartyBase.MainParty.ItemRoster.GetItemNumber(_foodToBeDelivered) = _numFoodToBeDelivered; } private void TransferFoodFromPlayerInventory() { GiveItemAction.ApplyForParties( PartyBase.MainParty, QuestGiver.CurrentSettlement.Party, _foodToBeDelivered, _numFoodToBeDelivered); } } }} テスト フォルダー構成や SubModule.xml についてなどはこれまで同様です。 セリフ等に日本語テキストを使っていますが、日本語化 MOD を入れていなくても普通に表示されるはずです。 テストプレイの際はチートを使うとはかどります。使い方の詳細については「チート」ページを参照してください。 IssueOwner のもとに行くには、 campaign.print_specific_issues village needs food で所在地が一覧表示されるので、 campaign.find_settlement 拠点名 でカメラ移動し、Ctrl + 左クリックで拠点のそばにワープしましょう。 サンプルクエストの肉付け サンプルは、Issue の生成から Quest 完了までの骨組みだけが実装してあります。このままでも一応動作はしますが、中身はスカスカで何も実行されていない状態なので、これにいろいろ追加していきましょう。 コードはあくまで一例なので、大体のやり方をつかんだら好きにいじくってもらって構いません。 発生の条件 サンプルクエストは Grain を IssueOwner のもとに持っていくというものですが、IssueOwner のいる拠点に Grain が豊富にある場合、その拠点で買ってすぐにクリアなんてことができてしまいますし、何より「食糧が無くて困っている」という Issue のストーリー自体が破綻してしまっています。したがって、Grain が豊富な拠点の Hero はそもそも IssueOwner に選ばれないようにする措置が必要です。 + サンプルコード VillageNeedsFoodIssueBehavior private const int VillageGoodsThreshold = 10; private const int TownGoodsThreshold = 50; private bool ConditionsHold(Hero issueOwner) { // IssueOwner になれるのは Headman (村長) のみ // IssueOwner は村に所属していなければならない // その村の食糧は一定値未満でなければならない Settlement currentSettlement = issueOwner.CurrentSettlement; if (!issueOwner.IsHeadman || currentSettlement is null || !currentSettlement.IsVillage || currentSettlement.ItemRoster.GetItemNumber(DefaultItems.Grain) = VillageFoodThreshold) { return false; } // 町と取引していないか、町にも食糧が無い Settlement tradeBound = currentSettlement.Village.TradeBound; return tradeBound is null || tradeBound.ItemRoster.GetItemNumber(DefaultItems.Grain) TownFoodThreshold; } 条件消滅 Issue 生成時には存在していた問題が、プレイヤー以外の力によって解決してしまうこともあり得ます。サンプルで言えば、最初は Grain が不足していたとしても、村人が買い入れるなどして補充された、というような状況です。そんな時には Issue を消滅させる方が自然でしょう。 消滅条件は IssueBase.IssueStayAliveConditions() で設定します。 + サンプルコード VillageNeedsFoodIssue public override bool IssueStayAliveConditions() { // 食糧がクエスト開始条件の3倍以上に増えたら false を返して消滅させます。 return IssueOwner.CurrentSettlement.ItemRoster.GetItemNumber(_requestedFood) VillageFoodThreshold * 3; } 発生の影響 公式のクエストは、「Issue が存在している限り何らかのパラメーターが変化し続ける」という形で Issue の影響を表現しています。例えば、賊討伐クエストだったら賊がのさばっていることを表すために拠点の治安が減り続け、道具不足の村は寂れて世帯数が減り続ける、といった具合です。 これを実装するには IssueBase.GetIssueEffectsAndAmountInternal() をオーバーライドします。 + サンプルコード VillageNeedsFoodIssue // using System.Collections.Generic protected override Dictionary IssueEffect, float GetIssueEffectsAndAmountInternal() { // 変化量は1日あたりのものです。Issue の自然消滅日数を考慮して設定しないと、 // トータルのペナルティが重くなりすぎてしまいます。 return new Dictionary IssueEffect, float () { { DefaultIssueEffects.VillageHearth, -0.5f }, { DefaultIssueEffects.IssueOwnerPower, -0.2f } }; } 解決手段 Issue の解決手段には、プレイヤーによる Quest クリア、Alternative Solution、Lord Solution の三通りがあります。サンプルには解決手段が Quest しか用意されていないので、Alternative Solution も追加してみましょう。 最初にも書いたように、Alternative/Lord Solution は Quest と違って会話と数値のやり取りしか発生しないので、全ての要素を Issue クラスの中で定義します。IssueBase に用意されたプロパティやメソッドをオーバーライドすることで、大体は動くようになっています。 public abstract bool IsThereAlternativeSolution まずは、これを true にします。 protected virtual int AlternativeSolutionNeededBaseMenCountInternal コンパニオンのお供として連れて行かせる兵数です。 public virtual bool DoTroopsSatisfyAlternativeSolution(TroopRoster troopRoster, out TextObject explanation) Alternative Solution を開始するのに十分な兵がいるかをチェックする場所です。 public virtual bool CompanionOrFamilyMemberClickableCondition(Hero hero, out TextObject explanation) 派遣できる英雄の条件を設定する場所です。 public virtual bool IsTroopTypeNeededByAlternativeSolution(CharacterObject character) お供として選べる兵の条件 (主にティア) を設定する場所です。 protected virtual int AlternativeSolutionBaseDurationInDaysInternal 解決までにかかる日数です。 protected virtual int CompanionSkillRewardXP コンパニオンに入るスキル経験値です。 protected virtual TextObject AlternativeSolutionStartLog protected virtual TextObject AlternativeSolutionEndLogDefault 開始・終了時にジャーナルに書き込まれるログテキストです。 public virtual TextObject IssueAlternativeSolutionExplanationByIssueGiver Quest の説明を受けた後のプレイヤーのセリフ、“Any other way?”(他に手段は?) に続いて表示される IssueOwner のセリフです。 public virtual TextObject IssueAlternativeSolutionAcceptByPlayer いずれかの解決手段を選ぶ場面で、Alternative Solution の選択肢に表示されるテキストです。 public virtual TextObject IssueAlternativeSolutionResponseByIssueGiver Alternative Solution を選択した際の IssueOwner のセリフです。 進捗状況 クエストの進捗状況 (サンプルクエストの場合「物資を幾つ集めたか」) を、プログレスバーとしてジャーナルに表示できます。 protected JournalLog AddDiscreteLog(TextObject text, TextObject taskName, int currentProgress, int targetProgress, TextObject shortText = null, bool hideInformation = false) text ログテキスト taskName プログレスバーが何を表しているのかを説明するテキスト currentProgress プログレスバーの初期値 targetProgress プログレスバーの最大値 ただし、このプログレスバーは自動的に更新されるわけではありません。サンプルクエストで言えば、インベントリーをチェックして物資量に変化があるたびに書き換える必要があります。 + サンプルコード VillageNeedsFoodIssueQuest // using TaleWorlds.CampaignSystem.SandBox private JournalLog _progressLog; private TextObject FoodGatheredInfo { get { TextObject textObject = new TextObject("必要な {FOOD} が集まりました。 依頼人の所に戻りましょう。"); textObject.SetTextVariable("FOOD", _foodToBeDelivered.Name); return textObject; } } private int CurrentFoodAmount = PartyBase.MainParty.ItemRoster.GetItemNumber(_foodToBeDelivered); protected override void RegisterEvents() { CampaignEvents.PlayerInventoryExchangeEvent.AddNonSerializedListener(this, OnPlayerInventoryExchange); } // クエストを請けたとき private void QuestAcceptedConsequences() { AddLog(QuestAcceptLog); // プログレスバーを追加しています。 TextObject text = new TextObject("{FOOD}を{FOOD_NUMBER}集める。") .SetTextVariable("FOOD", _foodToBeDelivered.Name) .SetTextVariable("FOOD_NUMBER", _numFoodToBeDelivered); // text の部分を TextObject.Empty とすれば、純粋にプログレスバーだけの表示になります。 _progressLog = AddDiscreteLog(text, new TextObject("集めた食糧"), 0, _numFoodToBeDelivered); UpdateProgress(); // これを呼ぶだけで、通知の表示や効果音再生など、クエスト開始に伴う処理が自動的に実行されます。 StartQuest(); } private void UpdateProgress() { _progressLog.UpdateCurrentProgress((int)MathF.Clamp(CurrentFoodAmount, 0f, _numFoodToBeDelivered)); } private void OnPlayerInventoryExchange( List ValueTuple ItemRosterElement, int purchasedItems, List ValueTuple ItemRosterElement, int soldItems, bool isTrading) { UpdateProgress(); if (PlayerHasFood()) { // クリア条件を満たしたことを通知でプレイヤーに知らせています。 InformationManager.AddQuickInformation(FoodGatheredInfo); } } 報酬 報酬をお金で渡すには、まず IssueBase.RewardGold プロパティをオーバーライドして報酬額を設定します。固定値にしてもいいですが、公式のクエストではクエスト難易度でスケーリングしていることが多いです。 protected override int RewardGold = (int)(500f + 1000f * IssueDifficultyMultiplier); こうすると、基本値 500 と、難易度係数 (0.1 ~ 1.0) で変動する値が 1000 なので、600 ~ 1500 が報酬額となるわけです。 IssueBase.RewardGold は QuestBase のコンストラクターに渡されるので、QuestBase.RewardGold フィールドにも自動的に値が設定されます。 値を設定したら、次はそれを授与する処理です。「報酬」とは成功したことを報いるものですから、仮想メソッド QuestBase.OnCompleteWithSuccess() をオーバーライドして、そこに記述するのがいいでしょう。 + サンプルコード VillageNeedsFoodIssueQuest protected override void OnCompleteWithSuccess() { // プレイヤーキャラクターに対する報酬 // IssueBase.RewardGold が設定してあれば、QuestBase.RewardGold ↓ にも反映されています。 GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, RewardGold); Hero.MainHero.AddSkillXp(DefaultSkills.Athletics, 100f); } 報酬を物品で渡したいなら、ここをアイテム授与の記述にします。 VillageNeedsFoodIssueQuest protected override void OnCompleteWithSuccess() { GiveItemAction.ApplyForParties(null, PartyBase.MainParty, DefaultItems.Meat, 10); } これで、プレイヤーが Issue を解決する行為、すなわち Quest への報酬が設定されました。Quest 以外の解決手段である、Alternative/Lord Solution に対する金銭報酬は、IssueBase.RewardGold を設定しておくだけで支払いまで勝手にやってくれます。物品の場合は、IssueBase.AlternativeSolutionEndWithSuccessConsequence() や IssueBase.LordSolutionConsequence() あたりをオーバーライドして記述することになるでしょう。 決着の影響 Issue が、成功にせよ失敗にせよ、一応の決着を見たことによって生じる影響はいろいろ考えられますが、代表的なのは、プレイヤーと IssueOwner との Relation (関係性、友好度) 変化でしょうか。IssueBase.RelationshipChangeWithIssueOwner と、QuestBase.RelationshipChangeWithQuestGiver という専用のプロパティが用意されており、そこに変化量を指定するだけで、一部パークの影響なども含めて勝手に処理してくれます。前者は Alternative/Lord Solution 用、後者は Quest 用です。 他にも影響するであろう物事は、 Power 英雄の権力や地位を数値化したもの。問題を解決したことで、IssueOwner の所属コミュニティー内での地位が向上する、というイメージです。 Trait 英雄の特性、性質、性格といったもの。期限を守らなかったり IssueOwner を裏切ったりしたら、プレイヤーの Honor を下げる、みたいなことです。 Skill 例えば武力行使を伴うようなクエストだったら、武器スキル経験値が入ったりするのもいいかもしれません。 + サンプルコード VillageNeedsFoodIssueQuest protected override void OnCompleteWithSuccess() { // プレイヤーキャラクターに対する報酬 // IssueBase.RewardGold が設定してあれば、QuestBase.RewardGold ↓ にも反映されています。 GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, RewardGold); Hero.MainHero.AddSkillXp(DefaultSkills.Athletics, 100f); // クリアしたことによる影響 // Relation 値の幅は -100 ~ +100 なので、それを考慮した変化量にしましょう。 RelationshipChangeWithQuestGiver = 10; // QuestGiver 以外との Relation を変えたいときは、ChangeRelationAction クラスを使います。 // using TaleWorlds.CampaignSystem.Actions // // 例えば、QuestGiver と同じ拠点にいる全ての Notable (有力者) との Relation も上げたいのであれば // 以下のようにします。 foreach (Hero hero in QuestGiver.CurrentSettlement.Notables) { // QuestGiver はすでに上げてあるので除外。 if (hero != QuestGiver) { ChangeRelationAction.ApplyPlayerRelation(hero, 2); } } // Hero の Power 変更は簡単です。 // 公式のクエストを見るに、変化量は最大で±10程度にしておくのがよさそうです。 QuestGiver.AddPower(10f); // 各 Trait (Mercy, Valor, Honor, Generosity, Calculating) の値の幅は -4000 ~ +4000 です。 // using TaleWorlds.CampaignSystem.CharacterDevelopment.Managers TraitLevelingHelper.OnIssueSolvedThroughQuest( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, 50), new Tuple TraitObject, int (DefaultTraits.Mercy, 20) }); } public override void OnFailed() { RelationshipChangeWithQuestGiver = -10; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -50) }); } protected override void OnTimedOut() { RelationshipChangeWithQuestGiver = -5; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -25) }); } Quest の中断 Issue の関係者が死亡したとか、拠点が略奪を受けたために期限内に報告できないとかいうような状況になってしまうこともあり得ます。そうした不可抗力が発生してしまった場合には Quest を中断させましょう。公式のクエストは、拠点が略奪を受けた時と、プレイヤーと IssueOwner の所属勢力同士が戦争を始めた時に中断していることが多いです。 + サンプルコード VillageNeedsFoodIssueQuest private TextObject VillageRaidedLog { get { TextObject textObject = new TextObject("{VILLAGE.LINK} が略奪を受けたようだ。 もはや任務どころではない。"); StringHelpers.SetSettlementProperties("VILLAGE", QuestGiver.CurrentSettlement, textObject); return textObject; } } private TextObject WarDeclaredLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} の国と戦争が始まった。 {?QUEST_GIVER.GENDER}彼女{?}彼{\\?}との約束もこれまでだろう。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } protected override void RegisterEvents() { CampaignEvents.RaidCompletedEvent.AddNonSerializedListener(this, OnRaidCompleted); CampaignEvents.WarDeclared.AddNonSerializedListener(this, OnWarDeclared); } private void OnRaidCompleted(BattleSideEnum winnerSide, MapEvent mapEvent) { if (mapEvent.MapEventSettlement == QuestGiver.CurrentSettlement) { CompleteQuestWithCancel(VillageRaidedLog); } } private void OnWarDeclared(IFaction faction1, IFaction faction2) { if ((faction1.MapFaction == Clan.PlayerClan.MapFaction faction2.MapFaction == QuestGiver.MapFaction) || (faction2.MapFaction == Clan.PlayerClan.MapFaction faction1.MapFaction == QuestGiver.MapFaction)) { CompleteQuestWithCancel(WarDeclaredLog); } } 会話の作成 導入部 Issue に関する NPC とのやり取りの導入部は会話の流れが決まっており、“I heard you may need some help with a problem?”(何か困りごとがあると聞いたが?) より後の部分を、IssueBase クラスに用意された会話の部品となるプロパティをオーバーライドすることで成立させます。 IssueBase のプロパティ public abstract TextObject IssueBriefByIssueGiver Issue 内容を説明する IssueOwner のセリフです。 public abstract TextObject IssueAcceptByPlayer Issue 解決方法に関して説明を求めるプレイヤーのセリフです。 protected virtual TextObject IssuePlayerResponseAfterLordExplanation protected virtual TextObject IssuePlayerResponseAfterAlternativeExplanation 詳細不明です。 public abstract TextObject IssueQuestSolutionExplanationByIssueGiver クエストによる解決に必要な事柄を説明する IssueOwner のセリフです。 public virtual TextObject IssueAlternativeSolutionExplanationByIssueGiver コンパニオンによる解決に必要な事柄を説明する IssueOwner のセリフです。 protected virtual TextObject IssueLordSolutionExplanationByIssueGiver 領主としての解決に必要な事柄を説明する IssueOwner のセリフです。 protected virtual TextObject IssueRewardExplanationByIssueGiver 現状は使われていません。 public abstract TextObject IssueQuestSolutionAcceptByPlayer プレイヤー自身が解決する選択肢を選んだ際のプレイヤーのセリフです。 public virtual TextObject IssueAlternativeSolutionAcceptByPlayer public virtual TextObject IssueAlternativeSolutionResponseByIssueGiver コンパニオンに解決させる選択肢を選んだ際のプレイヤーと IssueOwner のセリフです。 protected virtual TextObject IssueLordSolutionAcceptByPlayer protected virtual TextObject IssueLordSolutionResponseByIssueGiver プレイヤーが領主として解決する選択肢を選んだ際のプレイヤーと IssueOwner のセリフです。 protected virtual TextObject IssueLordSolutionCounterOfferBriefByOtherNpc protected virtual TextObject IssueLordSolutionCounterOfferExplanationByOtherNpc protected virtual TextObject IssueLordSolutionCounterOfferAcceptByPlayer protected virtual TextObject IssueLordSolutionCounterOfferDeclineByPlayer protected virtual TextObject IssueLordSolutionCounterOfferAcceptResponseByOtherNpc protected virtual TextObject IssueLordSolutionCounterOfferDeclineResponseByOtherNpc IssueOwner と利害が対立する NPC が、逆オファーを持ちかけてくるような展開のクエストで使用します。 DialogFlow 導入部以外の会話は TaleWorlds.CampaignSystem.DialogFlow クラスを使って一から組み立てなければなりません。 [[NPC]]「こんにちは」 プレイヤー「やあどうも」 [[NPC]]「今日はどういったご用件で?」 プレイヤー「これこれこういう用で…」 [[NPC]]「分かりました。他に何か?」 ・ある プレイヤー「こういったことが…」 → 「他に何か?」に戻る ・ない [[NPC]]「では、これにて」 のような一連のやり取りをひとまとめにするものだと考えてください。 DialogFlow のメソッドは DialogFlow 自身を返すので、会話の流れに沿ってメソッドを連結していけます。 上の例は、おおむね次のようになります。 var dialogFlow = DialogFlow.CreateDialogFlow("conv_start") // 渡している文字列 (トークン) は適当です .NpcLine("こんにちは") .PlayerLine("やあどうも") .NpcLine("今日はどういったご用件で?") .PlayerLine("これこれこういう用で…") .GetOutputToken(out string token) .NpcLine("分かりました。他に何か?") .BeginPlayerOptions() .PlayerOption("ある") .PlayerLine("こういったことが…") .GotoDialogState(token) .PlayerOption("ない") .NpcLine("では、これにて") .EndPlayerOptions() .CloseDialog(); DialogFlow のメソッド public static DialogFlow CreateDialogFlow(string inputToken = null, int priority = 100) DialogFlow 自体を生成します。 public DialogFlow NpcLine(string npcText, ConversationSentence.OnMultipleConversationConsequenceDelegate speakerDelegate = null, ConversationSentence.OnMultipleConversationConsequenceDelegate listenerDelegate = null) NPC 側のセリフです。 public DialogFlow Condition(ConversationSentence.OnConditionDelegate conditionDelegate) 直前のセリフを条件付きで表示するときに用います。 public DialogFlow Consequence(ConversationSentence.OnConsequenceDelegate consequenceDelegate) 直前のセリフが表示された後に実行される処理を指定します。 public DialogFlow BeginPlayerOptions() public DialogFlow EndPlayerOptions() public DialogFlow PlayerOption(string text, ConversationSentence.OnMultipleConversationConsequenceDelegate listenerDelegate = null) 選択肢を作るときに用います。PlayerOption() が各選択肢で、それを BeginPlayerOptions() と EndPlayerOptions() で挟むようにします。 public DialogFlow GetOutputToken(out string oState) public DialogFlow GotoDialogState(string input) 会話の特定位置にジャンプするときに用います。 public DialogFlow CloseDialog() 会話を終了します。 TextObject の装飾 TaleWorlds.Localization.TextObject の文字列には、特殊な記述によってキャラクター等が持つ動的なパラメーターを反映させることができます。 TextObject textObject = new TextObject("私の名前は {PLAYER.LINK}。 年齢{PLAYER.AGE}歳だ。"); StringHelpers.SetCharacterProperties("PLAYER", Hero.MainHero.CharacterObject, textObject); "PLAYER" となっている部分は任意の文字列リテラルです。ドット以下の部分は使用したメソッドによって使えるものが異なります。どういう値に置換されるのかは Helpers.StringHelpers クラスを参照してください。 上の例は、名前が百科事典のリンク付きになり、現在の年齢が表示されます。 サンプルクエスト最終形 これまでの肉付けを踏まえたコードの最終形です。 VillageNeedsFood.cs + クリックで展開 using Helpers;using System;using System.Collections.Generic;using TaleWorlds.CampaignSystem;using TaleWorlds.CampaignSystem.Actions;using TaleWorlds.CampaignSystem.CharacterDevelopment.Managers;using TaleWorlds.CampaignSystem.SandBox;using TaleWorlds.Core;using TaleWorlds.Library;using TaleWorlds.Localization;using TaleWorlds.SaveSystem; namespace ExampleIssues{ public class VillageNeedsFoodBehavior CampaignBehaviorBase { private const int VillageFoodThreshold = 10; private const int TownFoodThreshold = 50; private const int MinTroopTier = 1; private const float IssueDuration = 30f; private const float QuestTimeLimit = 10f; private const float IssuePreConditionMinPlayerRelation = -10f; public override void RegisterEvents() { CampaignEvents.OnCheckForIssueEvent.AddNonSerializedListener(this, OnCheckForIssue); } public override void SyncData(IDataStore dataStore) { } // イベントリスナーです。 private void OnCheckForIssue(Hero hero) { // 詳しいことは分かりませんが、条件に合う Hero が見つかると // 指定した頻度で Issue が生成されるという感じでしょうか。 if (ConditionsHold(hero)) { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( new PotentialIssueData.StartIssueDelegate(OnStartIssue), typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon, null)); } else { Campaign.Current.IssueManager.AddPotentialIssueData( hero, new PotentialIssueData( typeof(VillageNeedsFoodIssue), IssueBase.IssueFrequency.VeryCommon)); } } // Hero が Issue を持つのに必要な条件を設定しています。 // // 開始直後から困窮している場所など無いと思われるので、 // テストプレイ用に条件は甘くしてあります。 private bool ConditionsHold(Hero issueOwner) { // IssueOwner になれるのは Headman (村長) のみ // IssueOwner は村に所属していなければならない // その村の食糧は一定値未満でなければならない Settlement currentSettlement = issueOwner.CurrentSettlement; if (!issueOwner.IsHeadman || currentSettlement is null || !currentSettlement.IsVillage || currentSettlement.ItemRoster.GetItemNumber(DefaultItems.Grain) = VillageFoodThreshold) { return false; } // 町と取引していないか、町にも食糧が無い Settlement tradeBound = currentSettlement.Village.TradeBound; return tradeBound is null || tradeBound.ItemRoster.GetItemNumber(DefaultItems.Grain) TownFoodThreshold; } private IssueBase OnStartIssue(in PotentialIssueData pid, Hero issueOwner) { return new VillageNeedsFoodIssue(issueOwner, DefaultItems.Grain); } // ---------------------------------------------------------------- // Issue に対する Behavior の定義はここまで。 // // ここからは、カスタム型を保存するためのクラスです。 // ---------------------------------------------------------------- // カスタムビヘイビアーで使用する型を登録します。 public class VillageNeedsFoodBehaviorTypeDefiner SaveableCampaignBehaviorTypeDefiner { // saveBaseId は、自分のビヘイビアー同士はもちろん、同時使用している他の MOD とも被ってはいけないそうです。 // また、番号を途中で変えるとセーブデータ読み込み時にクラッシュします。 // 番号付け規則は、追々コミュニティー内で意思統一が図られることでしょう。 public VillageNeedsFoodBehaviorTypeDefiner() base(001_123_456) { } // このクエストで使う独自のクラスを登録しています。 // // 構造体型なら SaveableTypeDefiner.DefineStructTypes() // 列挙型なら SaveableTypeDefiner.DefineEnumTypes() // のようにメソッドが分かれています。 protected override void DefineClassTypes() { // こちらの saveId は、各 SaveableCampaignBehaviorTypeDefiner の中で被りが無ければいいようです。 AddClassDefinition(typeof(VillageNeedsFoodIssue), 1); AddClassDefinition(typeof(VillageNeedsFoodIssueQuest), 2); } } // ---------------------------------------------------------------- // カスタム型の宣言はここまで。 // // ここからは Issue 本体の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssue IssueBase { [SaveableField(10)] private readonly ItemObject _requestedFood; // IssueBase.IssueBase() に渡す日数は、Issue が自然消滅するまでの日数です。 // クエストの達成期限と混同しないようにしてください。 public VillageNeedsFoodIssue(Hero issueOwner, ItemObject requestedFood) base(issueOwner, CampaignTime.DaysFromNow(IssueDuration)) { _requestedFood = requestedFood; } // Issue のタイトルです。 // 町などで Issue を抱えている人物のポートレートに表示されます。 // Quest のタイトルとは同じにも別にもできます。 // // チートコードで IssueOwner を探せなくなるので、テストでは日本語名は避けた方がいいです。 public override TextObject Title = new TextObject("Village Needs Food"); // Issue 内容の簡単な説明です。 // IssueOwner のポートレートで Title にマウスカーソルを合わせるとホバー表示されます。 public override TextObject Description { get { TextObject textObject = new TextObject("{ISSUE_OWNER.LINK} が食糧を届けるよう頼んでいる。"); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); return textObject; } } // 導入部のセリフのオーバーライドです。 public override TextObject IssueBriefByIssueGiver { get { TextObject textObject = new TextObject( "{FOOD} が乏しくなっているのですが、 " + "近くの町でもあまり手に入らないのです。 " + "このご時世、あまり遠方へ買い求めに行くことも " + "できず、困っております。"); textObject.SetTextVariable("FOOD", _requestedFood.Name); return textObject; } } public override TextObject IssueAcceptByPlayer = new TextObject( "何か私にできることはあるか?"); public override TextObject IssueQuestSolutionExplanationByIssueGiver = new TextObject( "いずこかで買い求め、持ってきてはいただけませ " + "んでしょうか? 報酬はお支払いいたします。"); public override TextObject IssueQuestSolutionAcceptByPlayer = new TextObject( "わかった、やってみよう。"); // コンパニオンに解決を任せられるか否かです。 public override bool IsThereAlternativeSolution = true; // Alternative Solution 用のセリフです。 public override TextObject IssueAlternativeSolutionExplanationByIssueGiver = new TextObject( "あなた様のご都合が悪いようであれば、お側付き " + "の方に届けていただくのでも構いません。"); public override TextObject IssueAlternativeSolutionAcceptByPlayer = new TextObject( "ならば部下を遣わすとしよう。"); public override TextObject IssueAlternativeSolutionResponseByIssueGiver = new TextObject( "それでは、よろしくお願いいたします。"); // Alternative Solution 用のログテキストです。 protected override TextObject AlternativeSolutionStartLog { get { TextObject textObject = new TextObject( "{SETTLEMENT.LINK} の {ISSUE_OWNER.LINK} に、 {REQUESTED_FOOD} を持ってくるよう頼まれた。 " + "あなたは部下の {COMPANION.LINK} に{TROOP_COUNT}人の兵を預け、それら届けさせることにした。 " + "{RETURN_DAYS}日後には任務を終え、戻ってくるだろう。 " + "その際には、報酬として {PAYMENT}{GOLD_ICON} を手にしてくるはずだ。"); StringHelpers.SetSettlementProperties("SETTLEMENT", IssueOwner.CurrentSettlement, textObject); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); StringHelpers.SetCharacterProperties("COMPANION", AlternativeSolutionHero.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _requestedFood.Name) .SetTextVariable("TROOP_COUNT", AlternativeSolutionSentTroops.TotalManCount) .SetTextVariable("RETURN_DAYS", GetTotalAlternativeSolutionDurationInDays()) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } protected override TextObject AlternativeSolutionEndLogDefault { get { TextObject textObject = new TextObject( "{COMPANION.LINK} たちは {REQUESTED_FOOD} を無事に届けた。 " + "{ISSUE_OWNER.LINK} は大いに喜び、約束通りの報酬を差し出した。"); StringHelpers.SetCharacterProperties("COMPANION", AlternativeSolutionHero.CharacterObject, textObject); StringHelpers.SetCharacterProperties("ISSUE_OWNER", IssueOwner.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _requestedFood.Name) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } // 領主として影響力を消費して解決できるか否かです。 public override bool IsThereLordSolution = false; protected override int AlternativeSolutionNeededBaseMenCountInternal = (int)(9f + (14f * IssueDifficultyMultiplier)); protected override int AlternativeSolutionBaseDurationInDaysInternal = (int)(10f + (8f * IssueDifficultyMultiplier)); protected override int RewardGold = (int)(500f + (1000f * IssueDifficultyMultiplier)); protected override int CompanionSkillRewardXP = (int)(600f + (800f * IssueDifficultyMultiplier)); // コンパニオンに求められるスキル値です。 // しきい値を下回っているコンパニオンに任せると失敗する可能性が発生します。 public override List SkillObject GetAlternativeSolutionRequiredCompanionSkill(out int requiredSkillLevel) { requiredSkillLevel = CompanionSkillThreshold; return new List SkillObject { DefaultSkills.Roguery, DefaultSkills.Trade, }; } // 要求される食糧の量です。 // クエスト難易度でスケーリングしています。 private int RequestedFoodAmount = (int)(15f + (30f * IssueDifficultyMultiplier)); private int CompanionSkillThreshold = 75; // Issue が自動生成される頻度です。 // IssueFrequency.VeryCommon // IssueFrequency.Common // IssueFrequency.Rare public override IssueFrequency GetFrequency() { return IssueFrequency.VeryCommon; } // Issue が消滅する条件を設定できます (StayAlive なので、正確には「消滅しないための条件」です)。 // // 例えば、この Issue が「物資を依頼人とは別の人のもとに届ける」というような内容だった場合、 // 届け先の人物が何らかの理由でゲームから退場してしまったら、その時点で Issue は破棄されなければなりません。 // (もちろん、プレイヤーが既にクエストを請けていればクエストも中止されるべきですが、それは Quest 側の仕事です。) // それには、以下のような感じにします。フィールドはあくまで一例です。 // bool IssueStayAliveConditions() = _targetNotable.IsActive; public override bool IssueStayAliveConditions() { // 食糧がクエスト開始条件の3倍以上に増えたら false を返して消滅させます。 return IssueOwner.CurrentSettlement.ItemRoster.GetItemNumber(_requestedFood) VillageFoodThreshold * 3; } // プレイヤーが Issue 解決を請け負えるかどうかの条件を設定できます。 protected override bool CanPlayerTakeQuestConditions( Hero issueGiver, out PreconditionFlags flag, out Hero relationHero, out SkillObject skill) { // 各条件に対応する PreconditionFlags でビットマスクをかけていきます。 flag = PreconditionFlags.None; relationHero = null; skill = null; // 友好度が低いと受けられないようにする。 if (issueGiver.GetRelationWithPlayer() IssuePreConditionMinPlayerRelation) { // このフラグを立てたときには、誰と仲が悪くて受けられないのかを返す必要があるようです。 flag |= PreconditionFlags.Relation; relationHero = issueGiver; } // 所属国同士が戦争中だと受けられないようにする。 if (issueGiver.MapFaction.IsAtWarWith(Hero.MainHero.MapFaction)) { flag |= PreconditionFlags.AtWar; } // いずれかのフラグが立っていると false が返るので請け負えなくなります。 return flag == PreconditionFlags.None; } // 詳細不明。公式の Issue でもほぼ使われていません。 protected override void CompleteIssueWithTimedOutConsequences() { } // Quest の発行処理です。 // コンストラクターに渡す日数は Quest の達成期限です。 protected override QuestBase GenerateIssueQuest(string questId) { return new VillageNeedsFoodIssueQuest( questId, IssueOwner, RequestedFoodAmount, _requestedFood, RewardGold, CampaignTime.DaysFromNow(QuestTimeLimit)); } protected override void OnGameLoad() { } // Issue 発生の影響です。 protected override Dictionary IssueEffect, float GetIssueEffectsAndAmountInternal() { // 変化量は1日あたりのものです。Issue の自然消滅日数を考慮して設定しないと、 // トータルのペナルティが重くなりすぎてしまいます。 return new Dictionary IssueEffect, float () { { DefaultIssueEffects.VillageHearth, -0.5f }, { DefaultIssueEffects.IssueOwnerPower, -0.2f } }; } public override bool DoTroopsSatisfyAlternativeSolution(TroopRoster troopRoster, out TextObject explanation) { explanation = TextObject.Empty; return QuestHelper.CheckRosterForAlternativeSolution(troopRoster, GetTotalAlternativeSolutionNeededMenCount(), ref explanation, MinTroopTier); } // 任務に派遣可能な英雄の条件です。 // e1.6.2 にて条件による制限は撤廃され、代わりに担当者のスキルに応じて失敗確率が発生するようになりました。 /* public override bool CompanionOrFamilyMemberClickableCondition(Hero companion, out TextObject explanation) { GetAlternativeSolutionRequiredCompanionSkills(out Dictionary SkillObject, int shouldHaveAll, out Dictionary SkillObject, int shouldHaveOneOfThem); explanation = TextObject.Empty; return QuestHelper.CheckCompanionForAlternativeSolution(companion.CharacterObject, ref explanation, shouldHaveAll, shouldHaveOneOfThem); } */ public override bool IsTroopTypeNeededByAlternativeSolution(CharacterObject character) { return character.Tier = MinTroopTier; } public override void AlternativeSolutionStartConsequence() { // 食糧の購入資金を差し引いています。 Hero.MainHero.ChangeHeroGold(-_requestedFood.Value * RequestedFoodAmount); } protected override void AlternativeSolutionEndWithSuccessConsequence() { // 担当キャラクターに対する報酬は、プロパティで設定してあるので勝手に適用されます。 // クリアしたことによる影響 RelationshipChangeWithIssueOwner = 10; foreach (Hero hero in IssueOwner.CurrentSettlement.Notables) { // QuestGiver はすでに上げてあるので除外。 if (hero != IssueOwner) { ChangeRelationAction.ApplyPlayerRelation(hero, 2); } } IssueOwner.AddPower(10f); TraitLevelingHelper.OnIssueSolvedThroughQuest( IssueOwner, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, 50), new Tuple TraitObject, int (DefaultTraits.Mercy, 20) }); } /* private void GetAlternativeSolutionRequiredCompanionSkills(out Dictionary SkillObject, int shouldHaveAll, out Dictionary SkillObject, int shouldHaveOneOfThem) { // 必須スキル // こちらの Dictionary に登録したスキルは、全てが指定レベル以上でなければなりません。 shouldHaveAll = new Dictionary SkillObject, int { { DefaultSkills.Trade, CompanionSkillThreshold } }; // 選択スキル // こちらの Dictionary に登録したスキルは、いずれかが指定レベル以上でなければなりません。 shouldHaveOneOfThem = null; // 例えば「近接武器スキルいずれか」という条件を追加したいのであれば、以下のように記述します。 // もちろん、しきい値は同一でなくても構いません。 // // shouldHaveOneOfThem = new Dictionary SkillObject, int // { // { DefaultSkills.OneHanded, CompanionSkillThreshold }, // { DefaultSkills.TwoHanded, CompanionSkillThreshold }, // { DefaultSkills.Polearm, CompanionSkillThreshold } // }; } */ } // ---------------------------------------------------------------- // Issue の定義はここまで。 // // ここからは Quest の定義です。 // ---------------------------------------------------------------- internal class VillageNeedsFoodIssueQuest QuestBase { // これらのフィールドは、セーブ/ロードをまたいで保持されるべき数値なので、SaveableField 属性を与えています。 // SaveableCampaignBehaviorTypeDefiner の宣言だけではダメなようです。 [SaveableField(10)] private readonly ItemObject _foodToBeDelivered; [SaveableField(20)] private readonly int _numFoodToBeDelivered; [SaveableField(30)] private JournalLog _progressLog; // Quest のタイトルです。 // ジャーナル (クエストログ) に表示されます。 // Issue のタイトルとは同じにも別にもできます。 public override TextObject Title = new TextObject("村が食糧を求めている"); // ジャーナルで達成期限を非表示にするか否かです。 public override bool IsRemainingTimeHidden = false; private TextObject QuestAcceptLog { get { TextObject textObject = new TextObject("{SETTLEMENT.LINK} の {QUEST_GIVER.LINK} に、{REQUESTED_FOOD} を持ってくるよう頼まれた。 報酬として {PAYMENT}{GOLD_ICON} を払ってくれるそうだ。"); StringHelpers.SetSettlementProperties("SETTLEMENT", QuestGiver.CurrentSettlement, textObject); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); textObject.SetTextVariable("REQUESTED_FOOD", _foodToBeDelivered.Name) .SetTextVariable("PAYMENT", RewardGold); return textObject; } } private TextObject QuestSuccessLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} のもとに、約束していた食糧を届けた。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } private TextObject FoodGatheredInfo { get { TextObject textObject = new TextObject("必要な {FOOD} が集まりました。 依頼人の所に戻りましょう。"); textObject.SetTextVariable("FOOD", _foodToBeDelivered.Name); return textObject; } } private TextObject VillageRaidedLog { get { TextObject textObject = new TextObject("{VILLAGE.LINK} が略奪を受けたようだ。 もはや任務どころではない。"); StringHelpers.SetSettlementProperties("VILLAGE", QuestGiver.CurrentSettlement, textObject); return textObject; } } private TextObject WarDeclaredLog { get { TextObject textObject = new TextObject("{QUEST_GIVER.LINK} の国と戦争が始まった。 {?QUEST_GIVER.GENDER}彼女{?}彼{\\?}との約束もこれまでだろう。"); StringHelpers.SetCharacterProperties("QUEST_GIVER", QuestGiver.CharacterObject, textObject); return textObject; } } public VillageNeedsFoodIssueQuest( string questId, Hero questGiver, int numFoodToBeDelivered, ItemObject foodToBeDelivered, int rewardGold, CampaignTime duration) base(questId, questGiver, duration, rewardGold) { _numFoodToBeDelivered = numFoodToBeDelivered; _foodToBeDelivered = foodToBeDelivered; SetDialogs(); InitializeQuestOnCreation(); } private int CurrentFoodAmount = PartyBase.MainParty.ItemRoster.GetItemNumber(_foodToBeDelivered); // クエスト進行中にゲームをセーブ - ロードした場合の初期化はここで行われます。 protected override void InitializeQuestOnGameLoad() { SetDialogs(); } // 会話の流れと、それに伴う処理のデリゲートを設定します。 protected override void SetDialogs() { OfferDialogFlow = DialogFlow.CreateDialogFlow(IssueManager.IssueClassicQuestStartToken) .NpcLine("お手数ですが、よろしくお願いいたします。") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestAcceptedConsequences)) .CloseDialog(); DiscussDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.QuestDiscussToken) .NpcLine("お頼みした仕事の首尾はいかがですかな?") .Condition(() = Hero.OneToOneConversationHero == QuestGiver) .BeginPlayerOptions() .PlayerOption("うむ、ここに持ってまいった。") .Condition(new ConversationSentence.OnConditionDelegate(PlayerHasFood)) .NpcLine("おお、ありがとうございます。 それでは、こちらをお納めくだされ。") .Consequence(new ConversationSentence.OnConsequenceDelegate(QuestFinishedConsequences)) .PlayerOption("いま取り組んでいるところだ。 しばし待たれよ。") .NpcLine("さようですか。 何卒よろしくお願いいたします。") .EndPlayerOptions() .CloseDialog(); // QuestCharacterDialogFlow = DialogFlow.CreateDialogFlow(QuestManager.CharacterTalkToken); } protected override void RegisterEvents() { CampaignEvents.PlayerInventoryExchangeEvent.AddNonSerializedListener(this, OnPlayerInventoryExchange); CampaignEvents.RaidCompletedEvent.AddNonSerializedListener(this, OnRaidCompleted); CampaignEvents.WarDeclared.AddNonSerializedListener(this, OnWarDeclared); } protected override void OnCompleteWithSuccess() { // プレイヤーキャラクターに対する報酬 // IssueBase.RewardGold が設定してあれば、QuestBase.RewardGold ↓ にも反映されています。 GiveGoldAction.ApplyBetweenCharacters(null, Hero.MainHero, RewardGold); Hero.MainHero.AddSkillXp(DefaultSkills.Athletics, 100f); // クリアしたことによる影響 RelationshipChangeWithQuestGiver = 10; foreach (Hero hero in QuestGiver.CurrentSettlement.Notables) { // QuestGiver はすでに上げてあるので除外。 if (hero != QuestGiver) { ChangeRelationAction.ApplyPlayerRelation(hero, 2); } } QuestGiver.AddPower(10f); TraitLevelingHelper.OnIssueSolvedThroughQuest( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, 50), new Tuple TraitObject, int (DefaultTraits.Mercy, 20) }); } public override void OnFailed() { RelationshipChangeWithQuestGiver = -10; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -50) }); } protected override void OnTimedOut() { RelationshipChangeWithQuestGiver = -5; QuestGiver.AddPower(-5f); TraitLevelingHelper.OnIssueFailed( QuestGiver, new Tuple TraitObject, int [] { new Tuple TraitObject, int (DefaultTraits.Honor, -25) }); } // 以下、会話の特定の段階で実行される処理です。 // クエストを請けたとき private void QuestAcceptedConsequences() { AddLog(QuestAcceptLog); // プログレスバーを追加しています。 TextObject text = new TextObject("{FOOD}を{FOOD_NUMBER}集める。") .SetTextVariable("FOOD", _foodToBeDelivered.Name) .SetTextVariable("FOOD_NUMBER", _numFoodToBeDelivered); // text の部分を TextObject.Empty とすれば、純粋にプログレスバーだけの表示になります。 _progressLog = AddDiscreteLog(text, new TextObject("集めた食糧"), 0, _numFoodToBeDelivered); UpdateProgress(); // これを呼ぶだけで、通知の表示や効果音再生など、クエスト開始に伴う処理が自動的に実行されます。 StartQuest(); } // クエスト目標をクリアしたとき private void QuestFinishedConsequences() { TransferFoodFromPlayerInventory(); AddLog(QuestSuccessLog); // クエストがどういう結果に終わったのかを QuestBase に知らせる必要があります。 // CompleteQuestWithSuccess() なら成功 // CompleteQuestWithFail() なら失敗 // CompleteQuestWithCancel() なら中止 // CompleteQuestWithTimedOut() なら期限切れ // CompleteQuestWithBetrayal() なら依頼人を裏切る形での決着 CompleteQuestWithSuccess(); } private bool PlayerHasFood() { return CurrentFoodAmount = _numFoodToBeDelivered; } private void TransferFoodFromPlayerInventory() { GiveItemAction.ApplyForParties( PartyBase.MainParty, QuestGiver.CurrentSettlement.Party, _foodToBeDelivered, _numFoodToBeDelivered); } private void UpdateProgress() { _progressLog.UpdateCurrentProgress((int)MathF.Clamp(CurrentFoodAmount, 0f, _numFoodToBeDelivered)); } // 以下、クエストの推移を判断するためのイベントリスナーです。 private void OnPlayerInventoryExchange( List ValueTuple ItemRosterElement, int purchasedItems, List ValueTuple ItemRosterElement, int soldItems, bool isTrading) { UpdateProgress(); foreach ((ItemRosterElement purchasedItem, int _) in purchasedItems) { // インベントリーに Grain が入れられた場合 if (purchasedItem.EquipmentElement.Item == _foodToBeDelivered PlayerHasFood()) { // クリア条件を満たしたことを通知でプレイヤーに知らせています。 InformationManager.AddQuickInformation(FoodGatheredInfo); break; } } } private void OnRaidCompleted(BattleSideEnum winnerSide, MapEvent mapEvent) { if (mapEvent.MapEventSettlement == QuestGiver.CurrentSettlement) { CompleteQuestWithCancel(VillageRaidedLog); } } private void OnWarDeclared(IFaction faction1, IFaction faction2) { if ((faction1.MapFaction == Clan.PlayerClan.MapFaction faction2.MapFaction == QuestGiver.MapFaction) || (faction2.MapFaction == Clan.PlayerClan.MapFaction faction1.MapFaction == QuestGiver.MapFaction)) { CompleteQuestWithCancel(WarDeclaredLog); } } } }} 名前
https://w.atwiki.jp/wiz8rmod/pages/51.html
最近Dodd the Slayer Modをプレイしたので攻略メモ オリジナルRPCがいる 〇〇まで連れていく~系クエストが多いので、RPCは1人固定、あとは度々チェンジという感じになってプレイした 職業バランスは良好 各職業の超強い専門装備を売ってくれるNPCがいるのでどの職業も強くなっている Monastery オリジナルNPCがいる 彼らにアイテムを順番に渡すことでエンチャント装備を作ってくれる。 『エンチャント』のキーワードでリストを教えてくれる Lanaというキャラは3つの隠しダンジョンをクリアすると手に入るアイテムで仲間になる。 最強のRPCなので是非仲間にしよう。 隠しダンジョン 侵入方法がちょっと変更になった それぞれ同マップに小屋が追加され入るための鍵が必要 小屋で手に入るアイテムをdagger、short sword、short staffに合成してそれを使うと入れる Arnika 商人のおじさんに3つのWildernessにいる盗賊に盗まれた3つの装備を渡すと 超強い装備を売ってくれるようになる。 最後までその装備でやっていける。 魔法屋のお姉さん エンチャントでポータルアイテムと無限MP回復を作ってくれる 絶対に作っておこう 地下シェルター? Swamp、Mine Tunnels、Bayjin、Mt.Gigasにそれぞれフックで入る地下がある 中には強力な敵がいるが倒すとそれぞれ超強い魔僧薬超のRPCがいる。 Unexplored Dominus オリジナルマップ 島エリアは呪文が使えない わかりづらいが西の崖の上に行ける場所がありそこから神殿にいける キノコと空き瓶を合成すると石化が解ける薬を作れる 館内のボタンを全部押して引き出しから手に入る斧をエンチャントして使うと 特殊エリアに進める 道中の仕掛けは手に入るガジェットパーツを使うと進める なんか角の像?に使うアイテムがわからなかったのでそこで終わった。